Java 如何使用Powermock模拟常规方法
在groovy中,我能够在测试中将方法的期望返回值设置为我想要的任何值。我可以使用PowerMock模拟常规方法吗 例如Java 如何使用Powermock模拟常规方法,java,mockito,easymock,powermock,Java,Mockito,Easymock,Powermock,在groovy中,我能够在测试中将方法的期望返回值设置为我想要的任何值。我可以使用PowerMock模拟常规方法吗 例如 int getYear() { return 2013; } 在测试中,我可以设置如下内容: expect(getYear()).andReturn(2012); //被测班级 class ProxyB { public X getDimensions(){ GetResponseX getResponseX = client.newSer
int getYear() {
return 2013;
}
在测试中,我可以设置如下内容:
expect(getYear()).andReturn(2012);
//被测班级
class ProxyB {
public X getDimensions(){
GetResponseX getResponseX = client.newServiceCall().call().getResponseX();
int d = getResponseX.getDimensions();
}
}
我想模拟部件
getResponseX.getDimensions()
以返回21。这是模拟简单调用的基本代码。鉴于以下类别:
class Foo{
int F(){
return 42;
}
}
你嘲笑它:
Foo fooMock = EasyMock.createMock(Foo.class);
EasyMock.expect(fooMock.F()).andReturn(41);
在您的案例中,问题是您需要模拟整个
client.newServiceCall().call().getResponseX()
为此,您可能需要更改类最初获取对client
的引用的方式。
例如,在构造函数中或通过setter方法获取它。它可能大致类似于:
class ProxyB{
YourClient client;
ProxyB(YourClient client){
this.client = client;
}
public X getDimensions(){
GetResponseX getResponseX = client.newServiceCall().call().getResponseX();
int d = getResponseX.getDimensions();
}
}
现在,在编写单元测试时,为
YourClient
创建一个mock,并将其传递给被测试类的构造函数。这样,您就可以完全控制它从方法ProxyB.getDimensions
中返回的内容。从这一点上,您可以沿着调用链进行模拟(是的,这是很多模拟)。最后,getResponseX
局部变量应该包含您的mock,您可以对其设置任何期望值。我们需要更多详细信息,如果方法是静态的或最终的,您需要Powermock。否则Easymock将完成这项工作。它不是静态的或最终的,但我正在测试定义此方法的类,因此我无法模拟该对象