如何使用Junit按顺序运行测试方法

Rag*_*son 8 java junit automated-tests selenium-webdriver

我正在使用JUnit和Selenium Webdriver.我想按照我在代码中编写测试方法的顺序运行我的测试方法,如下所示:

@Test
public void registerUserTest(){
    // code
}

@Test
public void welcomeNewUserTest(){
    // code
}

@Test
public void questionaireNewUserTest(){
    // code
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它总是按此顺序执行我的测试方法:

welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()
Run Code Online (Sandbox Code Playgroud)

如果我用后缀Test命名我的方法,那么我在某处读了一个答案,然后JUnit将按顺序执行它们,就像我在代码中命令它们一样.显然,这不起作用.

有帮助吗?谢谢

Jar*_*per 8

因此,对于像这样的测试 - 步骤彼此依赖 - 您应该将它们作为一个单元执行.你真的应该这样做:

@Test
public void registerWelcomeAndQuestionnaireUserTest(){
    // code
    // Register
    // Welcome
    // Questionnaire
}
Run Code Online (Sandbox Code Playgroud)

正如@Jeremiah在下面提到的,有一些独特的方法可以让不可预测的单独测试执行.

现在我已经说过,这是你的解决方案.

如果您想要单独的测试,可以使用@FixMethodOrder然后执行NAME_ASCENDING.这是我所知道的唯一方式.

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestMethodOrder {

    @Test
    public void testA() {
        System.out.println("first");
    }
    @Test
    public void testC() {
        System.out.println("third");
    }
    @Test
    public void testB() {
        System.out.println("second");
    }
}
Run Code Online (Sandbox Code Playgroud)

将执行:

testA(), testB(), testC()

在你的情况下:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ThisTestsEverything{

    @Test
    public void T1_registerUser(){
        // code
    }

    @Test
    public void T2_welcomeNewUser(){
        // code
    }

    @Test
    public void T3_questionaireNewUser(){
        // code
    }

}
Run Code Online (Sandbox Code Playgroud)