JUnit @Test ожидаемая аннотация не работает - PullRequest
33 голосов
/ 05 апреля 2011

У меня есть следующий тест:

@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.

Ответы [ 8 ]

47 голосов
/ 05 апреля 2011

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

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

8 голосов
/ 09 декабря 2014
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

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

7 голосов
/ 20 ноября 2012

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

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.

5 голосов
/ 02 января 2014

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

3 голосов
/ 05 апреля 2011

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

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

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

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

2 голосов
/ 14 января 2018

У меня была та же проблема, я только что изменил свои операторы импорта. Я удалил:

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

и добавлено:

import org.junit.Test;

И у меня все работало нормально.

2 голосов
/ 05 апреля 2011

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

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

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

1 голос
/ 05 апреля 2011

Только что проверил это под JUnit4: это работает, тест завершается успешно.Посмотрите, если это IllegalSelectorException или что-то подобное.

...