gpt4 book ai didi

java - Mockito:调用方法 A.a 时执行 B.b

转载 作者:太空狗 更新时间:2023-10-29 22:53:04 25 4
gpt4 key购买 nike

我正在使用 Mockito 进行 JUnit 测试。所以我要测试的代码中使用了一个给定的 A 类:

class A{

public A(){}

public final String a(String x){
return "A.a: " + x;
}

}

我想用另一个具有相同参数和相同类型返回值的方法调用替换方法调用 A.a。如您所见,不可能通过扩展类来覆盖方法 a,因为它是最终类。所以我现在拥有的是另一个具有 B.b 方法的 B 类:

class B{

public B(){}

public String b(String x){
return "B.b: " + x;
}

}

现在我想确保每次从代码中调用 A.a 时,都会使用 B.b 的返回值。是否有可能使用 Mockito 实现此目的(类似于 Mockito.when(A.a(x)).thenReturn(B.b(x)); )但具有相同的参数 x,而不知道值x?

如有任何帮助,我们将不胜感激,在此先感谢您!

最佳答案

Mockito 模拟通过扩展类和覆盖方法来工作,在您的情况下,这在 A.a(String) 上是不可能的。如果您希望发生这种情况,则必须删除最终修饰符。

现在假设 A.a(String) 不是最终的,你的要求完全可以用 mockito 实现:

given(mockA.a(anyString()).willAnswer(returnOfB(bInstance));

Answer<String> returnOfB(final B bInstance) {
return new Answer<String>() {
public String answer(Invocation invocation) {
String arg = (String) invocation.getActualArguments()[0];
return bInstance.b(arg);
}
};
}

请注意,此答案是在手机上写的,可能有拼写错误或名称错误,但您应该知道应该怎么做才能实现您想要的结果。

干杯

关于java - Mockito:调用方法 A.a 时执行 B.b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087944/

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