java JUnit使用不同输入的相同测试用例
我需要测试一种方法,例如:
public ObjRet foo(string input)
{
...
return objRet;
}
对于上面的方法,一个测试用例涉及input={null,“,”,etc},它将返回相同的默认对象,还有其他测试用例
我是否需要为每个输入拥有单独的测试用例(即使我需要为同一个默认对象进行验证)
或者我可以这样做
@Test
void testing()
{
String[] inputs = {null, "", " "};
List<ObjRet> received = new List<ObjRet>();
for(string input : inputs)
received.add(foo(input));
for(ObjRet obj : received)
Assert.assertEquals(obj, default);
}
我只是想确定使用for循环进行断言是否是一种好的做法
# 1 楼答案
JUnitParams库是创建所描述的参数化测试类型的完美方法。默认情况下,我会将其包含在每个项目中,因为这种模式非常常见。有关完整的文档,请参见http://code.google.com/p/junitparams/(非常简单,可以放在一页上)
对于JUnitParams,传递给@Parameters注释的字符串[]中包含的每个字符串都被解析为CSV,并用逗号分割,然后从每个标记中删除前导和尾随空格。令牌的数量还必须与测试方法的参数数量相匹配。由于需要包含null、空字符串和仅包含空格的字符串,因此需要使用一种方法来提供参数,如下所示:
原始问题中定义的三个测试将通过此示例代码,但如果取消注释第四个值(“其他值”),则第四个测试将(正确地)失败