我想选择执行JUnit测试的顺序。 我有4个类,里面有几个测试方法,我的目标是执行,例如,类A的方法Y,然后是类B的方法X,最后是类A的方法。
你能帮忙吗?
答案 0 :(得分:19)
从版本4.11开始,您可以使用注释指定执行顺序,并按方法名称排序:
import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {
@Test
public void test1Create() {
System.out.println("first");
}
@Test
public void test2Update() {
System.out.println("second");
}
}
<强> See JUnit 4.11 Release Notes 强>
答案 1 :(得分:18)
通常,您无法指定单独运行单元测试的顺序(尽管您可以在TestNG中指定优先级并为每个测试指定不同的优先级)。但是,单元测试应该能够单独运行,因此测试的顺序无关紧要。这是一种不好的做法。如果您需要按特定顺序进行测试,则应重新考虑您的设计。如果您发布有关订单原因的具体信息,我相信我们可以提供建议。
答案 2 :(得分:3)
JUnit对这个问题的回答是创建一个这样的测试方法:
@Test public void testAll() {
classA.y();
classB.x();
classA.z();
}
在某些情况下(设置和拆卸很重要),这显然是一个令人不满意的答案,但单元测试的JUnit视图是,如果测试不是独立的,那么你做错了。
如果上述情况不符合您的需求,请查看TestNG。
答案 3 :(得分:2)
创建一个TestSuite并按所需顺序调用测试方法。 @Yishai是正确的,因为JUnit的设计使得每个测试都是独立的。因此,如果您调用可以独立运行的测试方法,那么创建TestSuite以覆盖特定调用顺序的方案应该没有问题。
答案 4 :(得分:2)
可以以任意顺序进行测试的一般说法/想法太强了。
这实际上取决于你正在测试的内容。
例如,我正在测试我们有changePassword操作的服务器。
我认为很明显测试的顺序很关键。在changePassword之后,旧密码不再起作用了,之前就是这样。
我不希望在每次测试后恢复服务器状态,工作量太大。所有测试完成后我都可以做一次。
答案 5 :(得分:0)
如果前面的答案不满意,我注意到Sun JVM JUnit似乎总是按照定义的顺序执行单元测试。 显然,依靠这个并不是一个好主意。
答案 6 :(得分:0)
这可能对你很有意思:JExample
使用相互依赖性测试进行测试的另一种方法。
答案 7 :(得分:0)
您可以使用@Order()批注