gpt4 book ai didi

java - 有没有一种方法可以编写 Mockito.when(...) 来覆盖方法的所有重载,即对于共享相同方法名称的任何调用返回相同的内容?

转载 作者:行者123 更新时间:2023-11-30 05:49:28 25 4
gpt4 key购买 nike

我有一个生成的类,其中有一堆重载方法,例如

Foo create(int)
Foo create(String)
Foo create(int, String)
Foo create(String, String)
Foo create(Foo, int, String)
// ...
// ...
// ...
Foo create(Foo, int, String, Bar, Bar, Bar, Bar, Bar, Bar)

最多 9 个参数。

我知道我可以做到

when(mockedObj.create(any())).return(aThing);
when(mockedObj.create(any(), any())).return(aThing);
when(mockedObj.create(any(), any(), any())).return(aThing);
// ...
// ...
// ...
when(mockedObj.create(any(), any(), any(), any(), any(), any(), any(), any(), any())).return(aThing);

但我想知道是否有一种方法可以让方法的所有重载都返回一个东西。

最佳答案

实现此目的的一种方法是在模拟类型时使用默认答案。

来自 org.mockito.Mockito.mock(Class<T>, Answer) 的文档:

Creates mock with a specified strategy for its answers to interactions. It's quite advanced feature and typically you don't need it to write decent tests. However it can be helpful when working with legacy systems.

It is the default answer so it will be used only when you don't stub the method call.

所以可以写成:

MockedType mockedObj = Mockito.mock(MockedType.class, invocation -> aThing);

这将返回 aThing默认情况下。

但是,如果您需要更多控制,可以使用 invocation参数来检查它实际上是 create 的重载已被调用(特别是为了避免 ClassCastException s):

MockedType mockedObj = Mockito.mock(MockedType.class, 
(Answer<Foo>) invocation ->
invocation.getMethod().getName()
.equals("create") ? aThing: null);

关于java - 有没有一种方法可以编写 Mockito.when(...) 来覆盖方法的所有重载,即对于共享相同方法名称的任何调用返回相同的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com