mockito 任何模拟方法参考

doinxwow  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(179)

我在嘲笑这句台词:

ResponseEntity<String> response= gatewayOutWrapper.wrap_2P_OneWay(GatewayOut::getConnectionType, wit, serialNumber, metaData);

带有when(gatewayOutWrapper.wrap_2P_OneWay(GatewayOut::getConnectionType, any(), any(), any())).thenReturn(ResponseEntity.ok().body(responseBody));
但是我不知道如何模拟方法引用。我尝试了一些真实的值,但是在那一行运行测试时总是得到null,所以这是当不触发时。
有人能帮忙吗?

juzqafwq

juzqafwq1#

直接的答案是any()应该可以很好地工作,正如Lesiak在注解中提到的,Java将方法引用表示为implementations of single-method interfacesany可以很好地模拟这些接口。
您可能已经找到other Mockito pitfalls

  • 如果你在stubbing或者verify的时候使用了any这样的匹配器,你必须确保所有的参数都使用匹配器。在any()这样的匹配器旁边传递一个实数值,包括你的方法引用,是不允许的。eq是默认的,所以你可以用它来 Package 。
  • 如果gatewayOutWrapper的类是final,你需要选择最终的mock支持,否则null的值(any()等匹配器返回的值)将进入一个真实的的实现。这在Mockito 2.1+中是支持的,但它仍然不是Mockito 5的默认行为。
  • 如果gatewayOutWrapper是一个spy或者它调用真实的的方法,那么也可能会得到一个空指针异常;解决方案是使用doReturn,如下所示:
doReturn(ResponseEntity.ok().body(responseBody))
    .when(gatewayOutWrapper)
    .wrap_2P_OneWay(any(), any(), any(), any());

相关问题