Mockito 覆盖静态类多次调用的返回值

anj*_*ana 1 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*hme 5

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

when(static1.method(param1, param2, param3).thenReturn(myobj2);
Run Code Online (Sandbox Code Playgroud)

static1.method(param1, param2, param3)这会覆盖之前返回的存根myobj1

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

when(static1.method(param1, param2, param3)
    .thenReturn(myobj1)
    .thenreturn(myobj2);
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其缩写为

when(static1.method(param1, param2, param3)
    .thenReturn(myobj1, myobj2);
Run Code Online (Sandbox Code Playgroud)

使用这两种方式中的任何一种,第一个调用static1.method()将返回myobj1,第二个调用将返回myobj2

因此,您的代码应该首先与 一起使用inputstream1,然后再与inputstream2.