JUnit @Test ожидаемая аннотация не работает

У меня есть следующее испытание:

@Test(expected = IllegalStateException.class)
public void testKey() {
 int key = 1;
 this.finder(key);
}

Но JUnit сообщает, что тест терпит неудачу, хотя он выбрасывает - как и ожидалось - IllegalStateException.

Нужно ли мне настроить что-то еще, чтобы выполнить этот прогон?

Теперь я запускаю тест с помощью

@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {
}

как в этот вопрос, но я все еще не получаю желаемого результата.

И когда я удаляю префикс test, я все еще получаю сообщение об ошибке.

Я должен сказать, что я запускаю эти тесты с помощью Eclipse, но он настроен на использование JUnit 4. Runner.

7 ответов

Проблема заключалась в том, что класс, в который был вложен тест, был расширением TestCase. Поскольку это стиль JUnit 3, аннотация не работает.

Теперь мой тестовый класс является классом сам по себе.


@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase

У меня также были проблемы с @Test (expected =...) аннотацией, когда я расширил класс TestCase в своем базовом тесте. Использование @RunWith (JUnit4.class) помогло мгновенно (не очень элегантное решение, я признаю)


Я попробовал это и отлично работал, как ожидалось.

public class SampleClassTest {
@Test(expected = ArithmeticException.class )
public void lost(){
this.lost(0);
}
private void lost(int i) throws ArithmeticException {
System.out.println(3/i);
}
}

также убедитесь, что junit4 добавлен как зависимость, @(аннотации) - новая функция в junit 4.


Я столкнулся с такой же проблемой, решение прост: "Не расширяйте класс TestCase"


Нет, этот тест JUnit должен работать так, как есть - на этой стороне больше ничего не нужно.

Почему вы уверены, что тест выбрал IllegalStateException? Возможно ли, что он завернут в другое исключение другого типа?

Пожалуйста, сообщите точное сообщение об ошибке из JUnit.

Как пояснил @duffymo, легко проверить, что (если есть) исключение, которое действительно бросает тест.


Это выглядит правильно для меня.

Проверьте свои предположения. Вы уверены, что это исключение? Если то, что вы говорите, верно, удаление ожидаемого из аннотации должно привести к сбою.

Я бы прошел через код с помощью отладчика, чтобы узнать, что происходит. Я предполагаю, что у вас есть IDE, который сделает это, например IntelliJ.


Просто протестируйте это под JUnit4: эта работа DO, тест завершается успешно. Посмотрите, является ли это Illegal Selector Exception или таковым.

licensed under cc by-sa 3.0 with attribution.