java - 如何使用 Mockito 编写 void 方法的行为?

标签 java junit mocking mockito

<分区>

我有一个类似这样的 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;
        }
    }
}

请注意,将行为赋予模拟在某种程度上是测试可维护性的一条艰难道路,因为这意味着被测试的组件不是在纯受控环境/隔离中进行测试的。

关于java - 如何使用 Mockito 编写 void 方法的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27779943/

相关文章:

java - 单元测试、静态和工厂

javascript - 如何模拟作为参数传递的回调的调用?

java - 生产中的 Java Web 应用程序应如何处理 AJAX 请求期间意外的浏览器终止?

windows - 提取并创建包含 aux/aux.* 的 .jar 存档

java - @MockBean 和 @Autowired 在一个测试类中的相同服务

java - TestNG:Eclipse 被 JUnit 搞糊涂了

php - 如何真正对 Symfony 表单进行单元测试?

Python 单元测试 - 是否应该模拟其他 ClassMethods?

java - 有 48 小时的差异,将 C# Ticks 转换为 Java 时间戳

java - JTable 排序 - 选择一行