我有以下测试:
@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。
也许您无意中使用JUnit 3运行了测试。测试类是否扩展了TestCase? 当您更改测试方法的名称以使其不再以test开头时,会发生什么?
当测试名称不以test开头时,我收到消息junit.framework.AssertionFailedError: No tests found in MyClass
是的,该类扩展了TestCase。
好了,那就清楚了-您正在混合使用JUnit 3和JUnit 4功能,这些功能将不起作用。 可以使用JUnit 3样式或JUnit 4样式编写测试。
问题是,嵌套测试的类是TestCase的扩展。由于这是JUnit 3样式,因此注释不起作用。
现在我的测试班是一个单独的班。
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase
在基础测试中扩展TestCase类时,@ Test(expected = ...)注释也存在问题。使用@RunWith(JUnit4.class)可以立即帮助(我承认这不是一个非常优雅的解决方案)
您不应该再使用JUnit4 +扩展TestCase。
我尝试了这一点,并按预期工作。
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中的新功能。
我遇到了同样的问题,解决方案很简单:"不要扩展TestCase类"
不,这个JUnit测试应该可以正常工作-这边再也不需要了。
是什么让您确保测试抛出IllegalStateException?是否有可能将其包装到其他不同类型的异常中?
请从JUnit发布确切的失败消息。
正如@duffymo所建议的那样,很容易验证测试真正抛出的异常(如果有)。
JUnits消息:java.lang.IllegalStateException: ... MyErrorMessage ..
是的,有可能将异常包装到另一个包装中,但是在那种情况下,您应该声明包装器中的一个,而不要声明另一个包装器。
我遇到了同样的问题,只是更改了import语句。
我删除了 :
import org.junit.jupiter.api.Test;
import junit.framework.TestCase;
并添加:
import org.junit.Test;
它对我来说很好。
在我看来,这是正确的。
检查您的假设。您确定会引发异常吗?如果您说的是正确的,则从注释中删除期望的内容将使其失败。
我将与调试器一起逐步检查代码,以了解发生了什么。我假设您具有像IntelliJ这样的IDE。
刚刚在JUnit4下测试了此:此DO工作,测试成功完成。查看是否为Illegal Selector Exception等。