[英]How to verify that exception was thrown by mock method?
如何验证下面的代码中的模拟方法引发了异常?
它只是在检查方法上引发异常而不会结束验证。
// import mockito
...
@Test
public void someTest() throws Exception {
// reset and setup mock
reset(mock);
when(mock.getObj(Matchers.anyLong()))
.thenReturn(new Obj());
when(mock.save(any(Obj.class)))
.thenThrow(new RuntimeException("Error!"));
// work where mock is used (it throws no exceptions)
work();
// verify that exception on mock.save() was thrown
// ! PROBLEM HERE: exception throws right here and verify doesn't end
verify(mock, times(1)).save(any(Obj.class));
}
UPD
work()-仅向在嵌入式Kafka服务器上工作的Kafka-consumer(正在测试)发送消息。
模拟-模拟使用者逻辑中的某些对象。
在这种情况下,检出异常是用于检查使用者算法的某个分支的其他检查(其他断言不重要(已删除):它们检查消息是否起作用)。
我认为“工作”会引发RuntimeException吗?
如果是这样,您可以使用try catch来包围work()方法,例如...
try {
work();
Assert.fail("Did not catch expected exception!");
} catch(RuntimeException ex) {
// Expected
}
verify(mock, times(1)).save(any(Obj.class));
如果没有,您可能需要发布测试中的代码,以使我们了解发生了什么...
编辑:仍然不是100%确定您的意思,此测试对我来说是通过...
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class Stack {
@Mock
private Mocked mock;
@Test
public void someTest() throws Exception {
reset(mock);
when(mock.getObj(Matchers.anyLong()))
.thenReturn(new Obj());
when(mock.save(any(Obj.class)))
.thenThrow(new RuntimeException("Error!"));
work();
verify(mock, times(1)).save(any(Obj.class));
}
private void work() {
Obj obj = mock.getObj(1234L);
try {
mock.save(obj);
} catch(Exception ex) {
// Bad things happened
}
}
private interface Mocked {
Obj getObj(long l);
Obj save(Obj obj);
}
public static class Obj {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.