如何单元测试方法返回Java字符串?

时间:2014-10-31 09:34:11

标签: java unit-testing mockito junit4

您好我有很多方法可以返回我需要进行单元测试的字符串。现在挑战我的是如何进行代码覆盖?对于例如我的方法如下所示

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

请提出您的想法如何对这种情况进行单元测试?我正在使用mockito进行单元测试。我是模拟和单元测试的新手,请指导。提前致谢。

2 个答案:

答案 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对象或将假数据放入配置提供程序。