Ответ 1
Вы не можете гарантировать порядок выполнения тестовых методов в JUnit.
Порядок выполнения тестов классов в пакете гарантирован (если вы используете Suite), но порядок выполнения, если тестовые классы найдены путем отражения, не является (например, если вы используете пакет в Eclipse или набор тестов из maven или ant). Это может быть определено ant или maven, но это не определено JUnit.
В общем, JUnit выполняет методы тестирования в том порядке, в котором они определены в исходном файле, но не все JVM гарантируют это (в частности, JVM 7). Если некоторые из методов наследуются от абстрактного базового тестового класса, то это может и не быть. (Это похоже на ваше дело, но я не могу сказать из вашего описания).
Подробнее об этом см. в моем ответе на . Начал ли JUnit4 поддерживать заказ теста? Преднамеренно?.
Итак, что вы можете сделать, чтобы исправить свою проблему? Существует два решения.
В вашем первоначальном примере вы фактически получили только один тест (проверьте), но у вас есть 4 метода, две установки (createUser, joinUserToRoom) и один разрыв (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, в котором вы может определять зависимости от одного теста к другому.