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;