Junit测试用例 - 首先执行特定的测试用例

时间:2013-11-21 14:42:52

标签: java junit

有没有办法在测试类中首先执行特定的测试用例,而不管类中存在测试用例的顺序?

示例:

public class TestExample {

    @Test
    public void test1() {}

    @Test
    public void test2(){}

}

我们可以先执行test2吗?我们有 @Order 这样的东西吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

订购测试通常被认为是一个坏主意,因为它意味着测试不是独立的。非独立测试可能导致多个测试失败(例如,如果您有多个测试依赖于另一个测试设置的共享状态,如果沿途的任何测试都无法清理,那么连续测试会受到损害),它可以是很难弄清楚出了什么问题。理想的是一个问题应该导致一个测试失败。

无论如何,我曾经想过因为前面的JUnit不支持这个,但显然它确实如此,see this answer。 (对于指出这一点的其他答案,+1。)制作自己的MethodSorter的一个简单方法是使用现有的一个,NAME_ASCENDING,并更改您想要首先进行的方法名称,以便排序最高。

BTW这个特征并不完全令人憎恶;例如,如果您处于怀疑依赖关系陷入困境的情况下,最好有一种方法来调整测试的顺序,以弄清楚发生了什么。

如果在执行任何测试之前有想要执行的内容,还有一个@BeforeClass注释。

答案 1 :(得分:2)

即使依赖于测试方法的顺序,我认为这是一种不好的做法,您仍然可以使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)注释(如果适合)。

如果这还不够,您还可以查看此post

答案 2 :(得分:2)

Junit和大多数单元测试框架的想法是所有测试都是独立的(不依赖于另一个),因此可以按任何顺序运行。我认为有些人会以随机顺序这样做。

我认为需要首先运行一个shpows,你的设置有问题。如果需要对所有测试或测试之前进行某些操作,请考虑在@setUp方法中实现该方法

如果您需要测试按顺序运行,因为您有依赖关系等,那么我会查看TestNG来自version 4.11的Junit有@FixMethodOrder(MethodSorters.NAME_ASCENDING)断言,因此您可以将第一个方法设为首先按字母顺序排列

答案 3 :(得分:-1)

为什么不呢?

    public void test1(){
    }    

    public void test2(){
    }    

    @Test
    public void test() {
        test2();
        test1();
    }

答案 4 :(得分:-1)

我使用这种模式:

public class TestExample {

    @Test
    public void test1() {
        firstTest();

        ...rest of test1...
    }

    @Test
    public void test2(){
        firstTest();    
    }

    private static boolean ranCommonCode = false;

    private void firstTest() {
        if( ranCommonCode ) return;
        ranCommonCode = true;

        ...code of test2...
    }
}