使用不同的数据多次运行相同的JUnit测试用例

时间:2009-04-15 16:21:35

标签: java junit

在进入下一个测试用例之前,有没有办法告诉JUnit多次运行不同数据的特定测试用例?

8 个答案:

答案 0 :(得分:65)

看看junit 4.4 theories

import org.junit.Test;
import org.junit.experimental.theories.*;
import org.junit.runner.RunWith;

@RunWith(Theories.class)
public class PrimeTest {

    @Theory
    public void isPrime(int candidate) {
          // called with candidate=1, candidate=2, etc etc  
    }

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

答案 1 :(得分:23)

听起来这是参数化测试的理想选择。

但是,基本上,参数化测试允许您对不同的数据运行相同的测试集。

以下是一些关于它的好博文:

答案 2 :(得分:12)

最近我开始了zohhak项目。它可以让你写:

@TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null,   0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}

答案 3 :(得分:5)

更好的方法(允许您拥有多个测试方法)是将JUnit与JUnitParams一起使用:

import junitparams.Parameters;
import org.junit.Test;

@RunWith(JUnitParamsRunner.class)
Public class TestClass() {

    @Test
    @Parameters(method = "generateTestData")
    public void test1(int value, String text, MyObject myObject) {
        ... Test Code ...
    }

    .... Other @Test methods ....

    Object[] generateTestData() {
        MyObject objectA1 = new MyObject();
        MyObject objectA2 = new MyObject();
        MyObject objectA3 = new MyObject();

        return $(
            $(400, "First test text.", objectA1),
            $(402, "Second test text.", objectA2),
            $(403, "Third test text.", objectA3)
        );
    }
}

您可以获得junitparams项目here

答案 4 :(得分:3)

这是我写的一篇文章,其中展示了使用代码示例重复运行测试的几种方法:

Run a JUnit test repeatedly

您可以使用@Parametrized跑步者,或使用帖子中包含的特殊跑步者

答案 5 :(得分:2)

我总是只创建一个帮助方法,根据参数执行测试,然后从JUnit测试方法调用该方法。通常这意味着单个JUnit测试方法实际上会执行大量测试,但这对我来说不是问题。如果你想要多个测试方法,每个不同的调用一个,我建议生成测试类。

答案 6 :(得分:2)

如果您已在测试课程中使用@RunWith,则可能需要查看this

答案 7 :(得分:1)

如果您不想或不能使用自定义跑步者(例如,您已经在使用其他跑步者,如Robolectric跑步者),您可以试试DataSet Rule