为啥 JUnit 测试异常总是失败? [复制]
Posted
技术标签:
【中文标题】为啥 JUnit 测试异常总是失败? [复制]【英文标题】:Why JUnit Testing exception always fail? [duplicate]为什么 JUnit 测试异常总是失败? [复制] 【发布时间】:2015-08-04 18:35:02 【问题描述】:我正在使用 JUnit 4.11。
Eclipse 版本:Luna Service Release 2 (4.4.2)
我需要做异常测试。代码可能是这样的:
// src code
public void myMethod throws MyException
...
throw new MyException(msg);
...
// test code
@Test (expected = MyException.class)
public void testMyMethod()
try
myMethod();
fail();
catch (MyException e)
assertEquals(expectedStr, e.getMessage());
但是测试总是失败,我哪里错了?
【问题讨论】:
补充@rgettman 的(正确)答案:您应该使用JUnit 的ExpectedException
测试异常。
【参考方案1】:
当您向Test
注释提供expected
异常时,只有在测试方法抛出预期的异常时测试才会成功。但是,您会在异常传播出方法之前捕获它。
看来您也想测试异常消息,所以重新throw
异常e
以满足测试。根据是否检查,您可能需要在方法上使用throws
子句。
【讨论】:
我不建议捕获异常只是为了测试消息并重新抛出它以满足测试。最好使用ExpectedException
规则。
如果您想测试消息以及抛出异常的事实,您可以简单地删除expected = MyException.class
并将其余代码保留在此处。这就是您在将异常添加到 JUnit 之前测试异常的方式,它仍然有效。
@Seelenvirtuose 是的,我认为你的建议很好。
@Seelenvirtuose 是的,这比回到旧样式要好。
但是只测试是否抛出异常呢?如果我没有捕捉到异常,我将无法通过 Eclipse 运行该项目。这意味着,我必须捕获异常。所以 @Test (expected = MyException.class) 没有意义。以上是关于为啥 JUnit 测试异常总是失败? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
获取存储在类中的异常对象时,Junit 测试失败,而不是抛出