卢声远 Shengyuan Lu 卢声远 Shengyuan Lu - 1 month ago 6
Java Question

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?

Answer

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.

Comments