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

Gir*_*ar 74 java junit

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

dfa*_*dfa 65

看看junit 4.4理论:

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};
}
Run Code Online (Sandbox Code Playgroud)


jjn*_*guy 24

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

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

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


pio*_*rek 12

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

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


Dav*_*idR 7

更好的方法(允许您拥有多个测试方法)是将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)
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里获得junitparams项目.