How to run test methods in order with Junit

后端 未结 4 1790
一生所求
一生所求 2021-01-12 04:34

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(         


        
相关标签:
4条回答
  • 2021-01-12 05:01

    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

    0 讨论(0)
  • 2021-01-12 05:03

    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

    0 讨论(0)
  • 2021-01-12 05:04

    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
        }
    
    }
    
    0 讨论(0)
  • 2021-01-12 05:08

    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)

    0 讨论(0)
提交回复
热议问题