【发布时间】:2017-08-24 13:28:45
【问题描述】:
我有以下课程 StackOverflow 中有一个答案,但它处理列表throw checked Exceptions from mocks with Mockito。我喜欢研究这种情况。没有找到我想念的地方。
public SimpleClass{
private SimpleClass() {}
public void runMethod(request,String,Map,Object,Object) {
try {
doesSomething()....
}
}
catch(Exception e) {
String message = "" + request.getAttribute(X) + "Some message";
Logger.Log(param1 + param2 + message);
}
}
我的测试方法如下所示。我试图用 JUnit 运行覆盖但 Catch Block 没有被覆盖,所以写了下面的测试方法。它引发以下异常。无法到达我想念的地方。
public class SimpleClassTest{
@Test
public void testCatchBlock() {
SimpleClass instanceObj = PowerMockito.mock(SimpleClass.class);
Mockito.doThrow(new Exception())
.when(instanceObj)
.runMethod(request, anyString(), anyMap(), anyObject(), anyObject());
}
}
抛出异常
org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: java.lang.Exception
编辑
我可以通过给出 NullPointerException 来运行该方法。当我尝试使用 Junit 进行代码覆盖时,catch 块完全显示为红色,catch 短语显示为黄色。如何实现 100% 的覆盖率以及如何在 catch 块中测试 String 消息。
【问题讨论】:
-
我已经尝试过,但无法得到我所缺少的。
-
@Sawyer 代码 sn-p 不完整,但我建议再次查看您的存根。
-
我无法实现 Catch 块中字符串的覆盖和测试。我该怎么做。
-
简单问题:
SimpleClass.firec2TEvents的声明中有throws Exception吗?如果不是,那么它可能不会抛出Exception,因为 Exception 是一个已检查的异常。如果你想测试那个 catch 块,你应该让它抛出一个RuntimeException——或者任何声明的检查异常。这就是失败告诉你的:你正试图抛出一个检查异常,但是有问题的方法没有声明抛出这个检查异常,所以你不允许抛出那个检查异常。 -
感谢及时回归 ;-)
标签: java junit mockito powermockito