Mockito / PowerMockito每次在不同实例的循环中模拟静态方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito / PowerMockito每次在不同实例的循环中模拟静态方法?相关的知识,希望对你有一定的参考价值。

我有一个静态方法,我需要使用Mockito / PowerMockito进行模拟

Public static Person MyFactory.getPersonObject(Info info)

这个方法正在循环中使用,并且对于每个Person,创建了Info瞬间。

InfoPerson的数据成员。

For(int i = 0;  i< SIZE; i++) {
Info info = getTheInfo(i);
Person person = MyFactory.getPersonObject(info);
………
………
}

我的问题是如何每次使用Info实例。我不能在我的嘲笑中使用getTheInfo(int)

这是我到目前为止所得到的:

PowerMockito.mockStatic(MyFactory.class);
PowerMockito.when(MyFactory.getPersonObject (Mockito.any(Info.class)).thenReturn( /*Person with its info instance*/);

Mockito.any(Info.class)应该在运行时用正确的Info实例替换,所以可能我没有使用正确的方法。

Mockito / PowerMockito支持吗?

谢谢

答案

这应该工作。

   ArgumentCaptor<Info> argumentCaptor = ArgumentCaptor.forClass(Info.class);

    doAnswer(invocation-> {
      Info info = argumentCaptor.getValue();
      /* check for some property of info and based on that return different instances of person object*/
      if(...) {
        return person1
      }
      else if (....) {
        return person2
      }
      ....
    }).when(MyFactory).getPersonObject(argumentCaptor.capture());

以上是关于Mockito / PowerMockito每次在不同实例的循环中模拟静态方法?的主要内容,如果未能解决你的问题,请参考以下文章

Mockito/PowerMockito踩坑记录

使用PowerMockito 对静态类进行mock

powermock

Mockito和PowerMock用法

Mockito的参数匹配

我们可以使用Mockito和PowerMock出售junit测试类