java - 如何模拟影响对象的无效返回方法

标签 java mockito

我正在为我的应用程序编写单元测试,我想知道 Mockito 框架是否有可能影响传递到返回模拟类无效的方法的对象。例如,调用一个模拟验证类,该类包含一个方法,该方法返回 void 但通过作为参数传入的对象跟踪各种更改和元数据。 .

public GetCartItemsOutput getCartItems(GetCartItemsInput getCartItemsInput) {
    CartItemsFilter cartItemsFilter = new CartItemsFilter();
    validator.validateCartItemsInput(getCartItemsInput, cartItemsFilter); ...

我为我的其他测试模拟了 validator 类,但对于这个我需要模拟对 cartItemsFilter 对象的更改,我不知道该怎么做。

最佳答案

答案是肯定的,您可以,根据您的测试需要,基本上有两个级别的执行此操作。

如果您只想测试与模拟对象的交互,您可以简单地使用 verify()方法,以验证是否调用了 void 方法。

如果您的测试确实需要模拟对象来修改传递给它的参数,您将需要实现 Answer :

已编辑以显示使用 Answer with void 方法的正确形式

doAnswer(new Answer() {
    @Override
    Object answer(InvocationOnMock invocation) {
        Object[] args = invocation.getArguments();
        ((MyClass)args[0]).myClassSetMyField(NEW_VALUE);
        return null; // void method, so return null
    }
}).when(mock).someMethod();

在 Java 8+ 中,上面的代码用 lambda 简化了:

doAnswer(invocation-> {
    Object[] args = invocation.getArguments();
    ((MyClass)args[0]).myClassSetMyField(NEW_VALUE);
    return null;
}).when(mock).someMethod();

关于java - 如何模拟影响对象的无效返回方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429169/

相关文章:

java - 如何在 Java 中模拟静态方法?

java - 如何使用Gson解析动态json?

java - 在循环内分配变量

java - 过滤后更新jtable模型

java - 如何让单元测试每次看到正在执行的java项目中的某个函数时都执行特定的测试用例?

java - 如何在后台控制FCM消息通知

java - Mockito 当方法不起作用时 [MockitoHint] 1. 未使用

android - 如何对 retrofit2 回调进行单元测试?

java - 模拟带有延迟的 void 方法

java - 在 for 循环中使用模拟对象列表时出现 NullPointerException