[英]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.