繁体   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