您好我有很多方法可以返回我需要进行单元测试的字符串。现在挑战我的是如何进行代码覆盖?对于例如我的方法如下所示
Public String getSqlToDoXYZ(Myconfig config) {
StringBuilder sb = new StringBuilder() ;
sb.append( "SELECT BLAH BLAH");
sb.append("WHERE ABC="+config.getABC());
return sb.toString() ;
}
请提出您的想法如何对这种情况进行单元测试?我正在使用mockito进行单元测试。我是模拟和单元测试的新手,请指导。提前致谢。
答案 0 :(得分:3)
正如其他地方所指出的,对于SQL注入,使用Strings for 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在这种情况下只会有所帮助。手工对象。
您的代码中可能还有其他内容使其变得困难,但您还没有为我们提供足够的信息。
答案 1 :(得分:2)
我无法看到测试返回字符串的方法有什么困难。
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
对象或将假数据放入配置提供程序。