簡體   English   中英

如何對返回Java字符串的方法進行單元測試?

[英]How to unit tests method returning Java string?

嗨,我有很多方法返回需要進行單元測試的字符串。 現在對我的挑戰是如何覆蓋代碼? 例如,我的方法如下所示

Public String getSqlToDoXYZ(Myconfig config) {
StringBuilder sb = new StringBuilder() ;
sb.append(  "SELECT BLAH BLAH");
sb.append("WHERE ABC="+config.getABC());
return sb.toString() ;
} 

請給出您的想法如何對這種情況進行單元測試? 我正在使用Mockito進行單元測試。 我對mockito和單元測試都是新手,請指導。 提前致謝。

如在其他地方指出的那樣,對於SQL注入,對SQL語句使用字符串是危險的。 話雖如此,您只需要調用該方法,並將結果與​​您手工構建的String進行比較:

public void testBuildSqlToDoXYZ() throws Exception {

   WhateverYourObjectIs yourObject = new WhateverYourObjectIs();
   MyConfig myConfig = new MyConfig();
   myConfig.setABC("foo");

   String sql = yourObject.getSqlToDoXYZ(myConfig);
   assertEquals("SELECT BLAH BLAH WHERE ABC='foo'", sql);

}

在這種情況下,如果無法手動創建“ MyConfig”對象,則Mockito只會有所幫助。

您的代碼中可能還存在其他困難,但您實際上並未向我們提供足夠的信息。

我認為測試返回字符串的方法沒有任何困難。

public void testSqlToDoXYZ()
{
 MyObj testTarget = new MyObj(/*Parameters if needed*/);
 Config config = new Config();
 /*Config config = new ConfigMock();*/
 String expectedResult = "SELECT BLAH BLACH WHERE ABC=123;";
 assertEquals(epxectedResult, testTarget.getSqlToDoXYZ(config));
}

關鍵是,您必須知道結果。 如果config.getABC()調用可以返回不同的值,則必須確保它始終為測試提供相同的值。 因此,您可能必須模擬config對象或將偽造的數據放入配置提供程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM