如何使用 Mockito 对 void 方法的行为进行编程



>我有一个控制器类,里面有这样的东西

public void create(int a, int b){
     //do something
}

现在我想模拟控制器类,并在调用我的模拟控制器类的创建方法时调用 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;
        }
    }
}

请注意,为模拟提供行为在某种程度上是测试可维护性的一条崎岖的道路,因为这意味着测试的组件没有在纯受控环境/隔离中进行测试。

因此,您希望覆盖某个方法的模拟行为。解决方案是使用所谓的间谍(AKA部分模拟)而不是模拟:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#16

相关内容

  • 没有找到相关文章

最新更新