Что может заставить JUnit игнорировать аннотации @Ignore?
Я просто использовал 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.
Ответы
Ответ 1
-
Убедитесь, что вы импортируете правильный @Ignore
. Чтобы явно использовать @org.junit.Ignore
явно.
-
Двойная проверка, выполняется ли ваш тест JUnit 4, а не 3. Самый простой способ сделать это - либо изменить имя теста, чтобы он не был префикс test
(теперь это не должно быть и JUnit 4 в любом случае не нуждается в этом префиксе) или проверьте иерархию наследования тестового примера: не должен распространяться прямо или косвенно из junit.framework.TestCase
(требование Junit 3).
Ответ 2
У меня была эта проблема, хотя JUnit 3 не был в моем классе. Я считаю, что режим совместимости на Junit 4 подбирает префикс "test" в вашем тестовом названии и, таким образом, работает как JUnit 3, а не собирает @Ignore. Решение состоит в том, чтобы переименовать ваш тест.
Ответ 3
Вы уверены, что тестовые классы были перекомпилированы?
Это довольно распространенная проблема, из-за которой перекомпиляция терпит неудачу, потому что где-то в источниках (например, с точкой с запятой) была опечатка, а среда IDE не говорит о том, что компиляция завершилась неудачно.
Попробуйте удалить папку target/test-classes
.
Ответ 4
Я думаю, что его просто @Ignore, который пропустит тест
JUnit Ignore
Ответ 5
В моем случае я обнаружил, что моя IDE выполнила тест, не обращая внимания на аннотацию @Ignore
. Когда я запустил mvn install
(или любую другую фазу maven), тест был пропущен и был тем, к чему я на самом деле стремился (см. Прилагаемую иллюстрацию).
Иллюстрации способов выполнения