Вы не можете гарантировать порядок выполнения теста методов в JUnit.
Порядок выполнения теста классов в наборе гарантируется (если вы используете Suite ), но порядок выполнения, если тест классы обнаруживаются с помощью отражения, а не (например, если вы запускаете пакет в Eclipse или набор тестов из maven или ant). Это может быть определено муравьем или maven, но это не определено JUnit.
Как правило, JUnit выполняет методы тестирования в порядке, в котором они определены в исходном файле, но не все JVM гарантируют это (в частности, с JVM 7). Если некоторые методы унаследованы от абстрактного базового тестового класса, это также может не выполняться. (Это похоже на ваш случай, но я не могу сказать из вашего описания).
Подробнее об этом см. В моем ответе на JUnit4 начал поддерживать порядок тестирования? Это намеренно? .
Так что вы можете сделать, чтобы решить вашу проблему? Есть два решения.
В исходном примере у вас есть только один тест (verify), но у вас есть 4 метода, два setup (createUser, joinUserToRoom) и один teardown (deleteUser). Таким образом, ваш первый вариант - лучше определить ваши тестовые случаи, используя TestRule , в частности ExternalResource . ExternalResource
позволяет вам определить поведение до / после теста, аналогично @Before/@After
. Однако преимущество ExternalResource
в том, что вы можете учесть это в своем тесте.
Итак, вы бы создали / удалили пользователя на вашем внешнем ресурсе:
public class UsesExternalResource {
@Rule
public ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
// create user
};
@Override
protected void after() {
// destroy user
};
};
@Test
public void testJoinUserToRoom() {
// join user to room
// verify all ok
}
}
Для меня это проще и легче понять, и вы получаете независимые тесты, и это хорошо. Это то, что я бы сделал, но вам нужно будет немного реорганизовать свои тесты. Вы также можете сложить эти правила, используя RuleChain .
Ваш второй вариант, если вы действительно хотите ввести зависимости между вашими методами тестирования, - это посмотреть TestNG , в котором вы можете определять зависимости от одного теста к другому.