How to pre-define the running sequences of junit test cases?

后端 未结 5 1737
无人及你
无人及你 2021-01-11 09:44

I have a test class in java and there are several methods annotated by @Test in it, somehow, i want to Junit run method A before method B when i run the whole tests. Is it p

相关标签:
5条回答
  • 2021-01-11 10:13

    Tests should have independent order, but some times we have not what we want. If you have a large legacy project with thousands of tests, and they depends on their execution order, you will have many problems, when, for example you will try to migrate on java 7, because it will shuffle all tests.

    You can read more about this problem here:

    junit test ordering and java 7

    0 讨论(0)
  • 2021-01-11 10:14

    This sort of dependency on test methods is bad design and should be avoided. If there is initialization code in one test method that needs to be done for the next, it should be factored out into a setUp method.

    0 讨论(0)
  • 2021-01-11 10:14

    The problem I have with this is reporting. If you WANT/NEED to see if each test method fails or passes then you're SCREWED.

    I understand that you don't want one test to build upon previous tests, But regardless of that, there may be situations that you need it to do this (or you'll increase the complexity of the test by an order of magnitude).

    Should the flow of tests in the code be up to the developer of the tests or the developer of the framework ?

    Show JUnit test code to 10 java developers, and I'll be willing to bet most will assume that the tests (regardless of anything external) will be run in the order they appear in the test class.

    Shouldn't THAT be the default behaviour of JUnit ? (Give me the option of telling it the order instead of JUnit figuring it out" on its own.)

    Update: 2014-11-18 The newer version of JUnit supports method sorters

    // This saves the tests in alphabetical order @FixMethodOrder(MethodSorters.NAME_ASCENDING)

    I would think that you might be able to create your own method sorter if you "really" wanted do do your own specific order.

    0 讨论(0)
  • 2021-01-11 10:29

    If it's only two methods then you'd need to wrap it in a single unit test that truly isn't order-dependent.

    @Test
    public void testInOrder() throws Exception {
        testA(); 
        testB(); 
    }
    
    0 讨论(0)
  • 2021-01-11 10:33

    use the following to setup thing before and after tests

    @Before
    public void setUp() throws MWException {
    
    }
    
    @After
    public void tearDown() {
    
    }
    
    0 讨论(0)
提交回复
热议问题