有没有办法告诉JUnit在继续下一个测试用例之前,用不同的数据连续运行一个特定的测试用例多次?
Answers:
看看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};
}
最近,我开始了zohhak项目。它使您可以编写:
@TestWith({
"25 USD, 7",
"38 GBP, 2",
"null, 0"
})
public void testMethod(Money money, int anotherParameter) {
...
}
,
-如果这与您的测试数据冲突,则可以通过明确指定分隔符来更改分隔符,例如@TestWith({"25 USD# 0"}, separator = "#")
更好的方法(允许您使用多个测试方法)是将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项目。
如果您正在使用一个@RunWith
在您的测试类,你可能需要看看这个。
我总是只创建一个基于参数执行测试的助手方法,然后从JUnit测试方法中调用该方法。通常这意味着一个JUnit测试方法实际上会执行很多测试,但这对我来说不是问题。如果您需要多种测试方法,每个不同的调用都需要一种方法,那么建议您生成测试类。
如果您不希望或不能使用自定义运行器(例如,您已经在使用其他运行器,例如Robolectric运行器),则可以尝试使用此DataSet规则。