Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mockito重写来自静态类的多个调用的返回值_Mockito_Powermock - Fatal编程技术网

Mockito重写来自静态类的多个调用的返回值

Mockito重写来自静态类的多个调用的返回值,mockito,powermock,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(pa

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

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创建多个返回对象?

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

when(static1.method(param1, param2, param3).thenReturn(myobj2);
这将覆盖先前返回的
myobj1
static1.method(param1,param2,param3)
的存根

为了在每次调用
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
,然后使用
inputstream2

。当你打电话的时候

when(static1.method(param1, param2, param3).thenReturn(myobj2);
这将覆盖先前返回的
myobj1
static1.method(param1,param2,param3)
的存根

为了在每次调用
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
,然后使用
inputstream2

为了能够编译您的代码,我必须解决其中的一些问题:我必须将调用从
Mock(MyObject.class)
更改为
Mock(MyObject.class)
。行
PowerMock(static1.class)
我需要更改为
PowerMock.mockStatic(static1.class)
。我需要将
thenreturn
-方法更改为
thenreturn
。还有一些分号在行尾缺少一个空格。如果您可以更新您的问题,那就太好了。为了能够编译您的代码,我必须解决其中的一些问题:我必须将调用从
Mock(MyObject.class)
更改为
Mock(MyObject.class)
。行
PowerMock(static1.class)
我需要更改为
PowerMock.mockStatic(static1.class)
。我需要将
thenreturn
-方法更改为
thenreturn
。还有一些分号在行尾缺少一个空格。如果你能更新你的问题就太好了。谢谢,这解决了问题。感谢您在这方面的快速帮助。谢谢,这解决了问题。感谢您在这方面的快速帮助。