Что может заставить JUnit игнорировать аннотации @Ignore? - PullRequest
26 голосов
/ 02 июня 2011

Я просто использовал MyEclipse для автоматической генерации некоторых тестовых примеров JUnit. Один из сгенерированных методов выглядит следующим образом:

@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}

Я добавил аннотацию @Ignore вручную. Однако, когда я запускаю тест, JUnit перечисляет этот метод и другие подобные ему в разделе «сбои», а не игнорирует их (связанный: В чем разница между ошибкой и ошибкой в ​​JUnit? ). И вместо сообщения «Игнорировано» отображается сообщение «Еще не реализовано». Ясно, что fail() должен вызываться, и, следовательно, утверждение @Ignore не работает.

Что здесь происходит? Есть ли настройка, которую мне нужно включить, чтобы это работало?

РЕДАКТИРОВАТЬ:
Вещи, которые я рассмотрел / попробовал до сих пор:

  • Я использую JUnit 4, поэтому проблема не в версии.
  • Я импортирую org.junit.Ignore, так что это не случай неправильного использования Ignore.
  • Я пытался использовать только @Ignore, @Ignore @Test и @Ignore("message") @Test; все терпят неудачу.

РЕДАКТИРОВАТЬ 2:
Я создал тесты с MyEclipse, через New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test, и библиотека в моем пути сборки - JUnit 4. Я собираю с помощью ant и фактически запускаю кейс с MyEclipse.

Ответы [ 5 ]

42 голосов
/ 02 июня 2011
  1. Убедитесь, что вы импортируете права @Ignore.Чтобы быть уверенным, используйте @org.junit.Ignore явно.

  2. Дважды проверьте, выполняется ли ваш тест JUnit 4, а не 3. Самый простой способ сделать это - изменить имя теста так, чтобык нему не добавляется префикс test (теперь его вообще не следует выполнять, и JUnit 4 все равно не нуждается в этом префиксе) или проверьте иерархию наследования тестового примера: он не должен расширять прямо или косвенноот junit.framework.TestCase (требование Junit 3).

4 голосов
/ 08 марта 2012

У меня тоже была эта проблема, хотя JUnit 3 не было на моем пути к классам.Я полагаю, что режим совместимости в Junit 4 использует префикс 'test' в вашем имени теста и, таким образом, работает как JUnit 3, а не получает @Ignore.Решение состоит в том, чтобы переименовать ваш тест.

2 голосов
/ 02 июня 2011

Вы уверены, что тестовые классы были перекомпилированы?

Это довольно распространенная проблема, что перекомпиляция завершается неудачно, потому что где-то в источниках была опечатка (например, пропущенная точка с запятой), а IDE не сообщаетошибка компиляции.

Попробуйте удалить папку target/test-classes.

1 голос
/ 27 января 2017

В моем случае я обнаружил, что моя IDE выполняет тест без учета аннотации @Ignore.Когда я запустил mvn install (или любой другой этап maven), тест был пропущен, и именно к этому я стремился (см. Прилагаемую иллюстрацию).

Иллюстрационная способов выполнения

0 голосов
/ 02 июня 2011

Я думаю, что просто @Ignore пропустит тест

JUnit Ignore

...