我有以下理论进行测试。在代码中,我希望变量a为偶数,变量b为奇数
@RunWith(Theories.class)
public class TestJunit{
// add the error
@DataPoints
public static Integer[] integersOdd() {
return new Integer[]{1, 3, 5};
}
@DataPoints
public static Integer[] integersEven() {
return new Integer[]{2, 4, 6};
}
@Theory
public void testAdd(Integer a , Integer b) {
...
}
}
现在我正在使用assumeTrue和验证函数,如:
public boolean validateInput(Integer a, Integer b){
Set<Integer> even = new HashSet<Integer>(Arrays.asList(integersEven()));
Set<Integer> odd = new HashSet<Integer>(Arrays.asList(integersOdd()));
return (even.contains(a) && odd.contains(b));
}
修改理论:
@Theory
public void testAdd(Integer a , Integer b) {
Assume.assumeTrue(validateInput(a,b));
System.out.println("a="+a+", b="+b);
assertTrue(a+b>-1);
// add any test
}
这是一种非常肮脏的方式,因为Java将选择所有组合,并将丢弃 assumeTrue 处的输入。如果我有10个数据点的10个理论怎么办? Java将尝试100种组合,我只想要10个!
有没有巧妙的方法呢?可能是一些注释告诉JUnit从DataPoint中选择变量的值?
修改 我发现的另一种方法是使用测试生成器。我正在使用JUnit-QuickCheck [Read Here]根据变量所需的范围生成随机数据。然后我将它们封装在一个类中,并将此对象传递给我的理论进行测试。
答案 0 :(得分:1)
JUnit 4.12允许理论中的命名数据点。这里是original pull request,这里是release notes for 4.12 - 寻找&#34;添加了匹配特定数据点的机制&#34;。