JUnit @Test期望注释不起作用

时间:2011-04-05 10:03:28

标签: java exception junit annotations throwable

我有以下测试:

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

但是JUnit报告说,测试失败了,尽管它按预期抛出IllegalStateException

我是否必须配置其他内容才能使其运行?


我现在用

运行测试
@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {

}

就像this question一样,但仍然没有得到理想的结果。

当我删除test前缀时,我仍然会收到错误消息。

我得说我用Eclipse运行这些测试,但是它被配置为使用JUnit 4 Runner。

8 个答案:

答案 0 :(得分:47)

问题是,嵌套测试的类是TestCase的扩展。由于这是JUnit 3样式,因此注释不起作用。

现在我的测试类本身就是一个类。

答案 1 :(得分:8)

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

当我在基础测试中扩展TestCase类时,我也遇到了@Test(expected = ...)注释的问题。使用@RunWith(JUnit4.class)帮助即时(不是一个非常优雅的解决方案,我承认)

答案 2 :(得分:7)

我试过这个,并按预期完美地工作。

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 :(得分:5)

我遇到同样的问题,解决方案很简单“不要扩展TestCase类”

答案 4 :(得分:3)

不,这个JUnit测试应该按原样运行 - 这方面没有什么需要了。

是什么让您确定测试会引发IllegalStateException?是否有可能将其包装到另一种不同类型的异常中?

请从JUnit发布确切的失败消息。

正如@duffymo建议的那样,很容易验证测试真正抛出的异常(如果有的话)。

答案 5 :(得分:2)

这对我来说是正确的。

检查您的假设。你确定它会抛出异常吗?如果您说的是真的,那么从注释中删除预期应该会使它失败。

我将使用调试器逐步调试代码,看看发生了什么。我假设你有一个IDE会这样做,比如IntelliJ。

答案 6 :(得分:2)

我遇到了同样的问题,我刚刚更改了我的导入语句。 我删除了:

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

并补充说:

import org.junit.Test;

它对我来说很好。

答案 7 :(得分:1)

刚刚在JUnit4下测试了这个:这个DO工作,测试成功完成。看看它是Illegal Selector Exception等等。