如何使JUnit测试用例按顺序运行?

Ath*_*ban 19 java junit operating-system junit4

我正在使用JUnit4.

我在测试用例中有一组测试方法.

每个测试方法都插入一些记录并验证测试结果,最后删除插入的记录.

由于JUnit并行运行,因为在执行上一个测试方法期间存在一些记录,测试方法会失败.这只发生在我的同事机器(Windows 7)中,而不是在我的机器(Cent OS 6)中.

我们需要的是测试方法必须通过我们所有的机器.

我已经尝试清除Setup()方法中的记录,但它再次只能在我的机器上运行.JUnit中是否有任何选项可以使测试方法以统一的顺序运行?

谢谢,

Ale*_*sky 26

JUnit 4.11现在支持使用@FixMethodOrder注释指定执行顺序.


Ran*_*ddy 25

MethodSorters是Junit 4.6发布后引入的新类.该类声明了三种类型的执行顺序,可以在执行它们时在测试用例中使用.

  1. NAME_ASCENDING(MethodSorters.NAME_ASCENDING) - 按字典顺序按方法名称对测试方法进行排序.

  2. JVM(null) - 按JVM返回的顺序保留测试方法.请注意,来自JVM的顺序因运行而异.

  3. DEFAULT(MethodSorter.DEFAULT) - 以确定性但不可预测的顺序对测试方法进行排序.

.

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

//Running test cases in order of method names in ascending order

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTestCasesExecution {

    @Test
    public void secondTest() {
        System.out.println("Executing second test");
    }

    @Test
    public void firstTest() {
        System.out.println("Executing first test");
    }

    @Test
    public void thirdTest() {
        System.out.println("Executing third test");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Executing first test
Executing second test
Executing third test
Run Code Online (Sandbox Code Playgroud)

参考:http://howtodoinjava.com/2012/11/24/ordered-testcases-execution-in-junit-4/

  • @DanielYang 这是针对 JUnit 5 的,但问题是针对 JUnit 4 的。 (3认同)

Roy*_*ove 8

JUnit无法保证测试顺序.

原因是单元测试是原子的 - 所有设置都应该在设置/拆除方法中进行,而不是通过其他测试进行.

考虑将插入数据的代码移动到另一个辅助类中,该类可以由插入的测试和需要验证的类调用,并在@Before方法中调用该类.

您还应该考虑一个模拟解决方案(例如Mockito),而不是直接命中数据库,如果可以的话 - 模拟将大大有助于确保您的测试很好并且孤立,并且,作为一个很好的附带好处,通常有助于指出你可以在哪里使用一些重构.