如何在 JUnit4 中按特定顺序运行测试方法?

新手上路,请多包涵

我想按特定顺序执行由 @Test 注释的测试方法。

例如:

 public class MyTest {
    @Test public void test1(){}
    @Test public void test2(){}
}

I want to ensure to run test1() before test2() each time I run MyTest , but I couldn’t find annotation like @Test(order=xx) .

我认为这对 JUnit 来说是非常重要的特性,如果 JUnit 的作者不想要 顺序特性,为什么?

原文由 Stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 797
2 个回答

我认为这对 JUnit 来说是非常重要的特性,如果 JUnit 的作者不想要顺序特性,为什么?

我不确定是否有一种干净的方法可以使用 JUnit 执行此操作,据我所知,JUnit 假定所有测试都可以按任意顺序执行。来自常见问题解答:

如何使用测试夹具?

(…) 无法保证 测试方法调用的顺序,因此 testOneItemCollection() 可能在 testEmptyCollection() 之前执行。 (…)

为什么会这样?好吧,我相信使测试 依赖于顺序 是作者不想提倡的一种做法。测试应该是独立的,它们不应该耦合,违反这一点 将使 事情更难维护,将破坏单独运行测试的能力(显然),等等。

话虽如此,如果您真的想朝这个方向前进,请考虑使用 TestNG,因为它本身支持以任意顺序运行测试方法(以及指定方法取决于方法组之类的事情)。 Cedric Beust 解释了如何 按照 testng 中测试的执行顺序执行 此操作。

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您摆脱现有的 Junit 实例,并在构建路径中下载 JUnit 4.11 或更高版本,则以下代码将按照名称的顺序执行测试方法,并按升序排序:

 import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void testAcreate() {
        System.out.println("first");
    }
    @Test
    public void testBupdate() {
        System.out.println("second");
    }
    @Test
    public void testCdelete() {
        System.out.println("third");
    }
}

原文由 Aniket Kulkarni 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题