Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run test methods in order with Junit

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

like image 345
Ragnarsson Avatar asked Mar 17 '16 16:03

Ragnarsson


2 Answers

So for tests like these - where the steps are dependent on each other - you should really execute them as one unit. You should really be doing something like:

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

As @Jeremiah mentions below, there are a handful of unique ways that separate tests can execute unpredictably.

Now that I've said that, here's your solution.

If you want separate tests, you can use @FixMethodOrder and then do it by NAME_ASCENDING. This is the only way I know.

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

will execute:

testA(), testB(), testC()

In your case:

@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
    }

}
like image 74
Jared Hooper Avatar answered Oct 21 '22 08:10

Jared Hooper


You can not run your test methods in order as how they are written. The point is test must be independent each other. JUnit doesn't encourage dependent tests.

But if you are very want...

There is the @FixMethodOrder annotation. Please, read the following Annotation Type FixMethodOrder

like image 21
Alexey Avatar answered Oct 21 '22 08:10

Alexey