JUnit两个变量迭代各自的值集,创建测试函数

时间:2009-07-27 09:04:10

标签: java junit

检查函数有两个参数,我想为各个域的笛卡尔积的每个元素都有一个测试用例,但是没有手动编写所有测试用例,如

void check(Integer a, Integer b) { ... }

@Test
public void test_1_2() { check(1, 2); }

...

在python中,我会选择

class Tests(unittest.TestCase):
    def check(self, i, j):
        self.assertNotEquals(0, i-j)



for i in xrange(1, 4):
    for j in xrange(2, 6):
        def ch(i, j):
            return lambda self: self.check(i, j)
        setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))

我怎么能用Java和JUnit做到这一点?

3 个答案:

答案 0 :(得分:5)

理论上你可以写出类似的东西:

@RunWith(Theories.class)
public class MyTheoryOnUniverseTest {

    @DataPoint public static int a1 = 1;
    @DataPoint public static int a2 = 2;
    @DataPoint public static int a3 = 3;
    @DataPoint public static int a4 = 4;

    @DataPoint public static int b2 = 2;
    @DataPoint public static int b3 = 3;
    @DataPoint public static int b4 = 4;
    @DataPoint public static int b5 = 5;
    @DataPoint public static int b6 = 6;

    @Theory
    public void checkWith(int a, int b) {
        System.out.format("%d, %d\n", a, b);
    }
}

(使用JUnit 4.5测试)

修改

理论也会产生很好的错误信息:

Testcase: checkWith(MyTheoryOnUniverseTest):        Caused an ERROR
checkWith(a1, b2) // <--- test failed, like your test_1_2

因此您无需为测试命名,以便轻松识别故障。

<强> EDIT2

或者您可以使用DataPoint s 注释:

@DataPoints public static int as[] = { 1, 2, 3, 4} ;
@DataPoints public static int bs[] = { 2, 3, 4, 5, 6};

@Theory
public void checkWith(int a, int b) {
    System.out.format("%d, %d\n", a, b);
}

答案 1 :(得分:2)

我会查看JUnit 4的parameterised tests,并动态生成测试数据数组。

答案 2 :(得分:1)

我认为你在JUnit 4中寻找参数化测试

JUnit test with dynamic number of tests