How to run test methods in order with Junit

Viewed 4305

I am using JUnit and Selenium Webdriver. I want to run my test methods in order as how I write them in my code, as below:

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

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

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

But it doesn't work, it always executes my test methods in this order:

welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()

I read an answer somewhere if I name my method with suffix Test, then JUnit would execute them in order as how I order them in code. Apparently, this doesn't work.

Any help? Thanks

4 Answers

You can sort methods with @FixMethodOrder(MethodSorters.NAME_ASCENDING) annotation. Like,

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

}

You can perform sorting in 3 ways:

  1. MethodSorters.DEFAULT- This default strategy compares test methods using their hashcodes. In case of a hash collision, the lexicographical order is used.
  2. MethodSorters.JVM- This strategy utilizes the natural JVM ordering – which can be different for each run.
  3. MethodSorters.NAME_ASCENDING- This strategy can be used for running test in their lexicographic order.

For more details please refer:The Order of Tests in JUnit

Use the following command above the class from which you will execute your tests

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

The MethodSorters.JVM annotation will execute your tests in the way that you have actually written in your file. (Just as the same way that Java code executes, line by line)

Related