Почему JUnit дважды запускает тесты с разными результатами? - PullRequest
0 голосов
/ 08 июня 2018

При запуске JUnit из Eclipse (используя правый клик | запустить как - те же результаты на уровне проекта и на уровне отдельных тестов) мои тесты запускаются дважды.Один раз тесты запускаются как положено (и помечены только именем пакета), в другой раз я получаю ложные исключения нулевого указателя (и помечен полным именем пакета).У меня нет никаких наборов, и разные результаты на прогонах означают, что это не похоже на ту же проблему, что и у других, когда тесты выполнялись дважды .

Мой тестfile (минус импорт):

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 Ответ

0 голосов
/ 08 июня 2018

JUnit запускает ваш тест дважды: один раз с движком Vintage, потому что он расширяет TestCase от JUnit 3, и один раз с движком Jupiter, потому что он содержит метод, помеченный org.junit.jupiter.api.Test.В то время как последний выполняет метод @BeforeEach, первый - нет.Просто удалите extends TestCase, и он будет запущен только один раз.

...