我有一个类似这样的 Controller 类
public void create(int a, int b){
//do something
}
现在我想模拟 Controller 类,并在调用我模拟的 Controller 类的创建方法时调用 exmaple doCustomCreate() 的某个方法。
我的测试“看起来像这样”
Controller ctrlMock = mock(Controller.class);
//PseudoCode: when(isCalled(ctrlMock.create(a,b)).doCall(doCustomCreate());
我只读到有关具有输入和返回值的模拟方法,所以我想知道这是否可能?
编辑:更新问题
只需将此 API 用于 void 方法:
doAnswer(doCustomCreate()).when(ctrlMock).create(a,b);
或者使用 BDDMockito
:
willAnswer(doCustomCreate()).given(ctrlMock).create(a,b);
其中 doCustomCreate()
返回一个 Answer
(返回 null
)。请注意,我使用 Void
只是为了表明此答案不会返回任何内容。
public Answer<Void> doCustomCreate() {
return new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
// your stuff
return null;
}
}
}
请注意,将行为赋予模拟在某种程度上是测试可维护性的一条艰难道路,因为这意味着被测试的组件不是在纯受控环境/隔离中进行测试的。