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

问题描述 投票:8回答:4

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

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

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

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

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

welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()

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

有帮助吗?谢谢

java selenium-webdriver junit automated-tests
4个回答
7
投票

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

@Test
public void registerWelcomeAndQuestionnaireUserTest(){
    // code
    // Register
    // Welcome
    // Questionnaire
}

正如@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");
    }
}

将执行:

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
    }

}

2
投票

您无法按照编写方式运行测试方法。关键是测试必须相互独立。 JUnit不鼓励依赖测试。

但如果你非常想......

有@FixMethodOrder注释。请阅读以下Annotation Type FixMethodOrder


0
投票

您可以使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)注释对方法进行排序。喜欢,

@FixMethodOrder(MethodSorters.DEFAULT)

public class DefaultOrderOfExecutionTest {private static StringBuilder output = new StringBuilder(“”);

@Test
public void secondTest() {
    output.append("b");
}

@Test
public void thirdTest() {
    output.append("c");
}

@Test
public void firstTest() {
    output.append("a");
}

@AfterClass
public static void assertOutput() {
    assertEquals(output.toString(), "cab");
}

}

您可以通过3种方式执行排序:

  1. MethodSorters.DEFAULT-此默认策略使用其哈希码比较测试方法。在哈希冲突的情况下,使用词典顺序。
  2. MethodSorters.JVM-此策略使用自然JVM排序 - 每次运行可能不同。
  3. MethodSorters.NAME_ASCENDING-此策略可用于按字典顺序运行测试。

有关详细信息,请参阅:The Order of Tests in JUnit


-1
投票

在要执行测试的类上方使用以下命令

@FixMethodOrder(MethodSorters.JVM)
public class TestMethodOrder {

    @Test
    public void signup() {
        System.out.println("Signup");
    }

    @Test
    public void login() {
        System.out.println("Login");
    }

    @Test
    public void navigate() {
        System.out.println("Navigate");
    }
}

MethodSorters.JVM注释将以您实际写入文件的方式执行测试。 (就像Java代码一样逐行执行)

© www.soinside.com 2019 - 2024. All rights reserved.