选择执行JUnit测试的顺序

时间:2010-04-19 17:15:54

标签: java netbeans junit testing

我想选择执行JUnit测试的顺序。 我有4个类,里面有几个测试方法,我的目标是执行,例如,类A的方法Y,然后是类B的方法X,最后是类A的方法。

你能帮忙吗?

8 个答案:

答案 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()批注