You не может гарантировать порядок выполнения теста методов в Юнит.
Порядок выполнения теста классов в ванной является гарантировано (если вы используете Suite), но порядок выполнения, если тестовые классы найдены отражение не является (например, если вы запускаете пакет в Eclipse или набор тестов от maven или ant). Это может быть определено ant или maven, но это не определено JUnit.
В общем, JUnit выполняет методы тестирования в том порядке, в котором они определены в исходном файле, но не все JVM гарантируют это (в частности, JVM 7). Если некоторые из методов наследуются от абстрактного базового тестового класса, то это может и не быть. (Это похоже на ваше дело, но я не могу сказать из вашего описания).
Для получения дополнительной информации об этом см. Мой ответ на вопрос Has JUnit4 begun supporting ordering of test? Is it intentional?.
Итак, что вы можете сделать, чтобы исправить свою проблему? Существует два решения.
В вашем первоначальном примере у вас есть только один тест (проверка), но у вас есть 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, в котором вы можете определить зависимости от одного теста к другому.
Спасибо, Мэтью, имеет смысл, я отдам это. –