Почему JUnit дважды запускает тесты с разными результатами?
При запуске JUnit из Eclipse (используя правый клик | запустить как - те же результаты на уровне проекта и на уровне отдельных тестов) мои тесты запускаются дважды. Один раз тесты выполняются как положено (и помечены только именем пакета), в другой раз я получаю ложные исключения нулевого указателя (и помечен полным именем пакета). У меня нет никаких наборов, и разные результаты на трассах означают, что это не та же проблема, что и у других, когда тесты запускаются дважды.
Мой тестовый файл (без импорта):
public class CommandHistoryTest extends TestCase {
private CommandHistory commandHistory;
@BeforeEach
public void initEach() {
commandHistory = new CommandHistory();
}
@Test
@DisplayName("On creation, canUndo and canRedo should be false")
public void testCreate() {
Assertions.assertFalse(commandHistory.canUndo());
Assertions.assertFalse(commandHistory.canRedo());
}
}
Как я уже сказал, это прекрасно работает на одном из проходов JUnit - он не работал, пока я не реализовал соответствующие биты commandHistory
и прошло, когда я реализовал их - но с другой стороны это дает мне исключение нулевого указателя на Assertions.assertFalse(commandHistory.canUndo());
Я могу с этим смириться, потому что я получаю действительный набор результатов испытаний, но вид всех этих красных флажков на втором проходе меня огорчает. Как мне остановить ложные тесты?
РЕДАКТИРОВАТЬ: я отмечаю, что в проводнике пакетов тест отображается как "> CommandHistoryTest.java". Я добавил еще один тестовый класс, который не показывает символ ">" в проводнике пакетов и который не запускается дважды. Что означает ">"?
ВНОВЬ РЕДАКТИРОВАТЬ: Нет, теперь я вижу, что '>' было частью интеграции git, но ответ ниже.
1 ответ
JUnit запускает ваш тест дважды: один раз с движком Vintage, потому что он расширяет TestCase
из JUnit 3 и один раз с движком Jupiter, потому что он содержит метод, аннотированный org.junit.jupiter.api.Test
, В то время как последний выполняет @BeforeEach
Метод, первый не делает. Просто удали extends TestCase
и он будет работать только один раз.