在进入下一个测试用例之前,有没有办法告诉JUnit多次运行不同数据的特定测试用例?
答案 0 :(得分:65)
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)
答案 5 :(得分:2)
我总是只创建一个帮助方法,根据参数执行测试,然后从JUnit测试方法调用该方法。通常这意味着单个JUnit测试方法实际上会执行大量测试,但这对我来说不是问题。如果你想要多个测试方法,每个不同的调用一个,我建议生成测试类。
答案 6 :(得分:2)
如果您已在测试课程中使用@RunWith
,则可能需要查看this。
答案 7 :(得分:1)
如果您不想或不能使用自定义跑步者(例如,您已经在使用其他跑步者,如Robolectric跑步者),您可以试试DataSet Rule。