当前位置: 首页 > 面试题库 >

如何模拟影响对象的void返回方法

史旺
2023-03-14
问题内容

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

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

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


问题答案:

答案是肯定的,您可以,并且根据测试的需要,基本上可以分为两个级别。

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

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

编辑 以显示使用带有无效方法的答案的正确形式

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();


 类似资料:
  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 调试时,在带有的行中弹出一个NullPointerException,类为。

  • 我有下面的课,我试图测试。我遇到问题的方法是,因为我试图存根/模拟行为,然后在测试中验证行为。

  • 我在尝试单元测试函数调用时遇到了一个问题。尽管调用已被存根,但由于无效方法调用而失败。 请在下面找到我的代码的简化快照。我正在使用do答案()存根来模拟空方法(基于StackOverflow上的早期答案)。 我甚至尝试了其他选项的和存根,但当调用存根方法时,它们也会在相同的NPE中失败:(。 如果有人能提出解决方案/解决方法,我将不胜感激。非常感谢。 考试班 正在测试的实现类,来自该类的存根方法调

  • 问题内容: 如果不是原始类型,返回类型的正确方法是什么?例如。我目前使用null如下。 问题答案: Void类是一个无法实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。 因此,以下任何条件就足够了: 参数化并返回或 参数化并返回 用您的一个参数化 你不能让这种方法,和其他任何回报 的东西 。由于忽略了某些内容,因此您可以返回任何内容。

  • 我需要模拟从私有方法返回的对象。我在我的项目中与junit和mockito合作。我不能在这里粘贴实际代码,但示例代码如下所示。这里的限制是代码是遗留的,我现在无法重构 要测试的类 道类 测试类别 请帮帮忙