How to program behavior of a void method with Mockito?
本问题已经有最佳答案,请猛点这里访问。
我有一个像这样的控制器类
1 2 3 | public void create(int a, int b){ //do something } |
现在,我想模拟控制器类,并在调用模拟控制器类的create方法时为exmaple docustomCreate()调用一个特定的方法。
我的测试看起来像这样
1 2 | Controller ctrlMock = mock(Controller.class); //PseudoCode: when(isCalled(ctrlMock.create(a,b)).doCall(doCustomCreate()); |
我只阅读了有关使用输入和返回值模拟方法的内容,所以我想知道这是否可能?
编辑:更新问题
只需将此API用于void方法:
1 | doAnswer(doCustomCreate()).when(ctrlMock).create(a,b); |
或使用
1 | willAnswer(doCustomCreate()).given(ctrlMock).create(a,b); |
其中,
1 2 3 4 5 6 7 8 | public Answer<Void> doCustomCreate() { return new Answer<Void>() { public Void answer(InvocationOnMock invocation) { // your stuff return null; } } } |
注:为模拟提供行为在某种程度上是测试可维护性的一条崎岖之路,因为这意味着测试组件不在纯受控环境/隔离中进行测试。
因此,您希望为某个方法重写模拟的行为。解决这个问题的方法是使用所谓的Spy(即部分模拟)而不是模拟:http://site.mockito.org/mockito/docs/current/org/mockito/mockito.html 16