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

时间:2016-03-17 16:43:48

标签: java selenium-webdriver junit automated-tests

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

welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()

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

[(LName, FName, Credits)]

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

有任何帮助吗?感谢

4 个答案:

答案 0 :(得分: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
    }

}

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

您可以对带有@FixMethodOrder(MethodSorters.NAME_ASCENDING)批注的方法进行排序。喜欢,

@FixMethodOrder(MethodSorters.DEFAULT)

公共类DefaultOrderOfExecutionTest {     私有静态StringBuilder输出=新的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

答案 3 :(得分:-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代码一样,逐行执行)