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?
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With