【发布时间】:2020-04-23 19:08:03
【问题描述】:
我可以将模拟对象作为参数传递给 thenThrow() 方法吗?我有这样的事情:
public class MyException extends Exception {
public MyException(MockedClass mockedClass) {
super("My message:" + mockedClass.doSth("foo"));
}
}
public class TestedServiceTest {
@Mock
MockedClass mockedClass;
@Mock
AnotherClass anotherClass;
@Before
public void init() {
when(mockedClass.doSth(anyString())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return invocation.getArgument(0);
}
});
}
@Test
public void notWorkingTestMethod() {
when(anotherClass.doSomething()).thenThrow(new MyException(mockedClass));
}
notWorkingTestMethod() 抛出 org.mockito.exceptions.misusing.UnfinishedStubbingException
但是,如果我在 void 方法上使用相同的技术,它就不会再抱怨了:
@Test
public void workingTestMethod() {
doThrow(new MyException(mockedClass)).when(anotherClass).doSomethingVoid();
}
}
还有其他可能的原因它不起作用吗?
【问题讨论】:
-
我最近也遇到了类似的问题,通过将do doThrow传递的值提取到适当的变量中来解决。