views:

87

answers:

1

I want to execute test methods which are annotated by @Test in spec 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?

Thanks!

+4  A: 

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

I'm not sure this 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.

Pascal Thivent
I suspect that JUnit4 tests are in fact done in spec order. It is not guaranteed because that would (1) promote bad practices among testers and would (2) tie JUnit's hands somewhat.
emory
Either you have two independent tests, or you only have one test and should code as such.
Jon Freedman