use*_*982 15 java junit unit-testing junit4 mockito
我正在使用Mockito进行JUnit测试.所以从我想要测试的代码中使用给定的A类:
class A{
public A(){}
public final String a(String x){
return "A.a: " + x;
}
}
Run Code Online (Sandbox Code Playgroud)
我想用另一个方法调用替换方法调用Aa与相同的参数和相同类型的返回值.正如您所看到的,不可能通过扩展类来覆盖方法a,因为它是最终的.所以我现在拥有的另一个B类方法是Bb:
class B{
public B(){}
public String b(String x){
return "B.b: " + x;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想确保每次从代码中调用Aa时,都会使用Bb的返回值.是否有可能通过Mockito(类似的东西Mockito.when(A.a(x)).thenReturn(B.b(x));)实现这一点,但使用相同的参数x,而不知道x的值?
任何帮助将不胜感激,谢谢你提前!
Bri*_*ice 20
好吧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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
请注意,这个答案已写在手机上,可能有错字或错误的名称,但你应该知道应该做些什么来实现你想要的.
干杯
根据Mockito 限制,不可能覆盖 Mockito 生成的模拟的最终方法。但是您可以使用Powermock在运行时破解代码,以便 Mockito 可以完成其工作。
| 归档时间: |
|
| 查看次数: |
16788 次 |
| 最近记录: |