Подтвердить что ты не робот

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.

4b9b3361

Ответ 1

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

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

Ответ 2

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

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.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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