在 groovy 中,我可以将方法所需的返回值设置为我在测试中想要的任何值。我可以使用 PowerMock 模拟常规方法吗?
例如
int getYear() {
return 2013;
}
在测试中,我可以设置如下内容:
expect(getYear()).andReturn(2012);
类下测试
class ProxyB {
public X getDimensions(){
GetResponseX getResponseX = client.newServiceCall().call().getResponseX();
int d = getResponseX.getDimensions();
}
}
我想嘲笑返回 21 getResponseX.getDimensions()
的部分。
这是模拟简单调用的基本代码。给定以下类:
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
创建一个模拟,并将其传递给受测类的构造函数。这样,您就可以完全控制它从方法ProxyB.getDimensions
中返回的内容。从这一点开始,你模拟了你的调用链(是的,这是很多模拟)。最终,getResponseX
局部变量应该包含您的模拟,您可以对其设置任何期望。