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 префикс я все еще получаю ошибку.

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

8 ответов


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

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


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

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


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

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 добавлен как dependancy, @ (аннотации) - новая функция в junit 4.


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


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

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

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

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


Мне это кажется правильным.

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

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


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


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

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

и добавил :

import org.junit.Test;

и это сработало отлично для меня.