在我的单元测试中,我需要模拟一个接口(interface),该接口(interface)的不同方法之间具有nextItem()
和isEmpty()
方法:
public interface MyQueue {
Item nextItem();
boolean isEmpty();
//other methods
...
}
我对模拟的要求是,
isEmpty()
最初应返回false,但在调用nextItem()
之后,isEmpty()
应返回true。因此,我 mock 一个项目的队列。nextItem()
等会导致特定类型的异常? P.S.由于其中的其他方法,我不想为测试提供接口(interface)的完整实现,从而导致难以理解和冗长的代码。
最佳答案
您可以使用thenAnswer()来实现这一点,Mockito文档中的一项功能引起争议:
另一个有争议的功能最初并未包含在Mockito中。我们建议仅对toReturn()或toThrow()使用简单的 stub 。这两个应该足以测试/测试驱动任何干净简单的代码。
这是答案:
private boolean called = false;
when(mock.nextItem()).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
called = true;
return item;
}
when(mock.isEmpty()).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
return called;
}
});