Mockito覆盖来自静态类的多个调用的返回值

时间:2018-03-12 18:54:09

标签: mockito powermock

对静态类进行了两次调用以获取对象。如下所示:

MyObject myobj1 = Mock(MyObject.class)

PowerMock(static1.class)

when(static1.method(param1,parame2,param3).thenreturn(myobj1);
myobj1.setcontent(inputstream1);

MyObject myobj2 = Mock(MyObject.class)

when(static1.method(param1,parame2,param3).thenreturn(myobj2);
myobj2.setcontent(inputstream2);

通过上述调用,我们注意到方法调用响应中设置的内容被inputstream2的内容覆盖。

我们如何使用Mockito创建多个返回对象?

1 个答案:

答案 0 :(得分:3)

当您使用相同参数执行多个存根时,每个存根都会覆盖前一个存根。当你打电话

when(static1.method(param1, param2, param3).thenReturn(myobj2);

这会覆盖之前返回static1.method(param1, param2, param3)的{​​{1}}的存根。

为了在myobj1的每次调用中返回不同的返回值,您需要链接static1.method()这样的调用:

thenReturn()

或者,您可以将其缩写为

when(static1.method(param1, param2, param3)
    .thenReturn(myobj1)
    .thenreturn(myobj2);

使用这两种方法中的任何一种,when(static1.method(param1, param2, param3) .thenReturn(myobj1, myobj2); 的第一次调用将返回static1.method(),第二次调用将返回myobj1

因此,您的代码应首先使用myobj2,然后使用inputstream1