我有以下测试:
@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。
答案 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
等等。