Java JUnit@Test预期注释不工作

Java JUnit@Test预期注释不工作,java,exception,junit,annotations,throwable,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) pu

我做了以下测试:

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

这在我看来是正确的

检查你的假设。您确定它会引发异常吗?如果您所说的是真的,那么从注释中删除预期值将使其失败


我会用一个调试器逐步检查代码,看看发生了什么。我假设您有一个IDE可以做到这一点,比如IntelliJ。

不,这个JUnit测试应该按原样工作-这方面不需要更多的东西

您如何确保测试抛出
非法状态异常
?它是否可能被包装到另一个不同类型的异常中

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


正如@duffymo所建议的,很容易验证测试真正抛出了什么异常(如果有)。

刚刚在JUnit4下测试了这个问题:这个方法有效,测试成功完成。查看它是否是非法的
选择器
异常
或诸如此类。

问题是,嵌套测试的类是
测试用例
的扩展。因为这是JUnit3样式,所以注释不起作用


现在,我的测试类是一个独立的类。

我尝试了这个类,并按照预期完美地工作

公共类SampleClassTest{
@测试(预期=算术异常.class)
公共空间丢失(){
这个。丢失(0);
}
私有void lost(int i)抛出算术异常{
系统输出打印LN(3/i);
}
}

还要确保junit4作为依赖项添加,@(注释)是junit4中的新特性。

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


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

我也遇到了同样的问题,我只是更改了我的imports语句。 我删除了:

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;
并补充说:

import org.junit.Test;

这对我来说很好。

也许您无意中使用JUnit3运行了测试。测试类是否扩展了TestCase?当您更改测试方法的名称,使其不再以
test
开头时会发生什么情况?当测试名称不以
test
开头时,我会收到消息
junit.framework.AssertionFailedError:在MyClass中找不到测试,是,这个类扩展了
TestCase
。用JUnit 3风格或JUnit 4风格编写测试。可能您正在导入的不是
org.JUnit.jupiter.api.test
。JUnit的消息:
java.lang.IllegalStateException:。。。MyErrorMessage..
是的,异常可以包装到另一个异常中,但是在这种情况下,您应该声明包装器,而不是另一个。您不应该再使用JUnit4+扩展TestCase。
import org.junit.Test;