多次使用不同的数据运行相同的JUnittesting用例
在继续下一个testing用例之前,有什么方法可以告诉JUnit连续不断地用不同的数据运行一个特定的testing用例吗?
看看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}; }
这听起来像是参数化testing的完美人选。
但是,基本上,参数化testing允许您对不同的数据运行同一组testing。
这里有一些关于它的好博客文章:
- 编写一个参数化的JUnittesting
- 使用JUnit 4.0进行unit testing
最近我开始zohhak项目。 它可以让你写:
@TestWith({ "25 USD, 7", "38 GBP, 2", "null, 0" }) public void testMethod(Money money, int anotherParameter) { ... }
这里是我写的一篇文章,其中显示了使用代码示例反复运行testing的几种方法:
重复运行JUnittesting
您可以使用@Parametrized跑步者,或者使用post中包含的特殊跑步者
一个更好的方法(允许你有多个testing方法)是使用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项目。
我总是只做一个帮助方法,根据参数执行testing,然后从JUnittesting方法中调用该方法。 通常这意味着一个单一的JUnittesting方法实际上会执行大量的testing,但这对我来说不是问题。 如果你想要多个testing方法,每个不同的调用一个,我build议生成testing类。
如果你已经在你的testing类中使用@RunWith
,你可能需要看看这个 。
如果您不想或不能使用自定义运行程序(例如您已经使用其他运行程序,如Robolectric运行程序),则可以尝试使用此数据集规则 。