mock对象返回具有相同参数的真实对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mock对象返回具有相同参数的真实对象相关的知识,希望对你有一定的参考价值。

我正试图嘲笑一家工厂。在这个例子中,这个工厂有一个方法create,它接受两个args并返回一个C对象,它有一个带有相同两个args的构造函数。我想设置我的工厂,当我命令我的工厂创建一个新的C时,它返回一个真正的新C,给定args到create方法。

Mockito.when(myFactory.create(Mockito.any(A.class), Mockito.any(B.class)))
    .thenReturn(new C(??, ??));

我怎样才能做到这一点?任何帮助将不胜感激

答案

使用doAnswer捕获并使用传递给模拟工厂调用的参数。

例如:

MyFactory myFactory = mock(MyFactory.class);

Answer<C> answer = new Answer<C>() {
    public C answer(InvocationOnMock invocation) throws Throwable {
        A a = invocation.getArgument(0, A.class);
        B b = invocation.getArgument(1, B.class);
        return new C(a, b);
    }
};

// either of these ...
when(myFactory.create(Mockito.any(A.class), Mockito.any(B.class))).thenAnswer(answer);

doAnswer(answer).when(myFactory.create(Mockito.any(A.class), Mockito.any(B.class)));
另一答案

试试这个:

MyFactory myFactory = mock(MyFactory.class);
A a = new A();
B b = new B();
doReturn(new C(a, b)).when(myFactory).create(eq(a), eq(b));

只需从hamcrest导入eq方法。

以上是关于mock对象返回具有相同参数的真实对象的主要内容,如果未能解决你的问题,请参考以下文章

具有装饰器的模拟功能。再次使用相同的装饰器来装饰 Mock 对象并使其保持为 Mock

前段如何用mock返回对象

java mock框架 —— Mcktio

什么是 Mock 测试?

mockito在单元测试的使用一

(转)Jmock快速上手教程