【发布时间】:2011-04-11 06:05:00
【问题描述】:
我想按特定顺序执行由@Test 注释的测试方法。
例如:
public class MyTest {
@Test public void test1(){}
@Test public void test2(){}
}
我想确保每次运行MyTest 时在test2() 之前运行test1(),但是我找不到像@Test(order=xx) 这样的注释。
我认为这对 JUnit 来说是相当重要的特性,如果 JUnit 的作者不想要 order 特性,为什么?
【问题讨论】:
-
你永远不应该编写需要以指定顺序执行的测试。这真是不好的做法。每个测试都应该能够独立运行。
-
@EJP 这对于 java pre 7 几乎是普遍适用的。在 7 之前,大多数 JVM 都这样做了,但从未得到保证。 Java 7 JVM 可以以不确定的顺序返回方法。
-
解决。从您的测试用例中删除@Test,将它们转换为私有函数,然后创建一个测试用例,并按顺序调用私有函数。
-
从测试用例中删除 @Test 会弄乱 JUnit 报告。顺便说一句,执行特定顺序对于单元测试来说是一种不好的做法,但对于集成测试来说不一定是一种不好的做法。最好的选择(不理想)是用
@FixMethodOrder(MethodSorters.NAME_ASCENDING)注释类,为所有测试方法保留@Test注释,并根据所需的执行顺序按字母顺序重命名它们,例如t1_firstTest()、t2_secondTest()等 -
很容易断言单元测试需要如何独立,但是以特定顺序运行测试仍然有很好的理由。就我而言,我为输入参数的 7 个可能值中的每一个运行三个单独的测试。对于每个可能的值,我想比较这三个测试,所以如果它们在输出中组合在一起,这样做会容易得多。它还帮助我识别测试失败中的模式。因此,感谢真正回答问题的人。
标签: java unit-testing junit junit4