gpt4 book ai didi

java - Mockito 更改非 void 方法的参数值

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:49 24 4
gpt4 key购买 nike

我正在尝试模拟一个方法,其签名是:

public A doSomething(B b, String str){}

我尝试使用 doAnswer 更新 str 值。但是,此方法返回具有条件设置值的对象 A。我无法找到一种方法来设置要传递给此方法的特定 str 值。谁能告诉我这是如何实现的?我不能在我的项目中使用 powermock。

最佳答案

对于一次性模拟,您可以使用 InvocationOnMock.getArguments获取 str 的值:

doAnswer(new Answer<Foo>() {
@Override public Foo answer(InvocationOnMock invocation) {
A a = mock(A.class);
when(a.someMethod()).thenReturn((String) (invocation.getArguments()[0]));
return a;
}
}).when(yourObject).doSomething(any(B.class), anyString());

// or with Java 8:
doAnswer(invocation => {
A a = mock(A.class);
when(a.someMethod()).thenReturn((String) (invocation.getArguments()[0]));
return a;
}).when(yourObject).doSomething(any(), anyString());

...但只要该方法是可模拟的(可见的和非最终的),您也可以将您的新方法内联编写为匿名内部子类(或在其他地方定义的静态子类),这可以完成相同的事情没有那么多转换和 Mockito 语法:

YourObject yourObject = new YourObject() {
@Override public A someMethod(B b, String str) {
A a = mock(A.class);
when(a.someMethod()).thenReturn(str);
return a;
}
};

关于java - Mockito 更改非 void 方法的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115014/

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