Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run test methods in specific order in JUnit4?

I want to execute test methods which are annotated by @Test in specific order.

For example:

public class MyTest {     @Test public void test1(){}     @Test public void test2(){} } 

I want to ensure to run test1() before test2() each time I run MyTest, but I couldn't find annotation like @Test(order=xx).

I think it's quite important feature for JUnit, if author of JUnit doesn't want the order feature, why?

like image 799
卢声远 Shengyuan Lu Avatar asked Sep 12 '10 03:09

卢声远 Shengyuan Lu


People also ask

Do JUnit tests run sequentially?

Basically, JUnit doesn't support ordering and the tests should be able to be run in any order. If you really need to have dependencies between tests, use TestNG, where you can have dependencies.

Can we prioritize tests in JUnit?

In general, you can't specify the order that separate unit tests run in (though you could specify priorities in TestNG and have a different priority for each test). However, unit tests should be able to be run in isolation, so the order of the tests should not matter.


1 Answers

I think it's quite important feature for JUnit, if author of JUnit doesn't want the order feature, why?

I'm not sure there is a clean way to do this with JUnit, to my knowledge JUnit assumes that all tests can be performed in an arbitrary order. From the FAQ:

How do I use a test fixture?

(...) The ordering of test-method invocations is not guaranteed, so testOneItemCollection() might be executed before testEmptyCollection(). (...)

Why is it so? Well, I believe that making tests order dependent is a practice that the authors don't want to promote. Tests should be independent, they shouldn't be coupled and violating this will make things harder to maintain, will break the ability to run tests individually (obviously), etc.

That being said, if you really want to go in this direction, consider using TestNG since it supports running tests methods in any arbitrary order natively (and things like specifying that methods depends on groups of methods). Cedric Beust explains how to do this in order of execution of tests in testng.

like image 97
Pascal Thivent Avatar answered Sep 21 '22 06:09

Pascal Thivent