如何测试 class 成员调用另一个方法的方法内部逻辑
How to test methods inner logic where class member is calling another method
我想测试一个 agentAgentInfo
方法,同时需要测试 wsProxy.findAgentInfo
方法。如何使用 PowerMockito/Mockito 进行测试?
private WSProxy wsProxy = new WSProxy();
public String getAgentInfo(String loginId) {
String agentInfo = null;
try {
agentInfo = wsProxy.findAgentInfo(loginId);
} catch (RemoteException e) {
e.printStackTrace();
}
return agentInfo;
}
您的问题是您创建了难以测试 的代码。
这里有两个选项:
- 您使用 PowerMock/PowerMockito 是为了允许您在此调用中注入一个模拟的 WSProxy 对象:
wsProxy = new WSProxy();
然后该模拟对象应该期待对 findAgentInfo()
.[=29 的调用=]
- 您将设计更改为使用依赖注入。换句话说:不是 class 直接 调用 new,而是使用其他方法来获取这样的 WSProxy 对象(例如通过构造函数接收一个)。
我通常推荐选项2;你可以通过学习如何创建 可测试的 代码(例如通过观看这些 videos)来实现目标。是的,PowerMock 可以解决此类问题;但问题是 PowerMock 并不是免费提供的——我已经花了很多时间用 PowerMock 调试 "issues";始终认为损坏与我们的生产代码无关。所以,尽管它很诱人;不使用 PowerMock 为我节省了 很多 时间;我可以用它来想出更好的设计。
我想测试一个 agentAgentInfo
方法,同时需要测试 wsProxy.findAgentInfo
方法。如何使用 PowerMockito/Mockito 进行测试?
private WSProxy wsProxy = new WSProxy();
public String getAgentInfo(String loginId) {
String agentInfo = null;
try {
agentInfo = wsProxy.findAgentInfo(loginId);
} catch (RemoteException e) {
e.printStackTrace();
}
return agentInfo;
}
您的问题是您创建了难以测试 的代码。
这里有两个选项:
- 您使用 PowerMock/PowerMockito 是为了允许您在此调用中注入一个模拟的 WSProxy 对象:
wsProxy = new WSProxy();
然后该模拟对象应该期待对findAgentInfo()
.[=29 的调用=] - 您将设计更改为使用依赖注入。换句话说:不是 class 直接 调用 new,而是使用其他方法来获取这样的 WSProxy 对象(例如通过构造函数接收一个)。
我通常推荐选项2;你可以通过学习如何创建 可测试的 代码(例如通过观看这些 videos)来实现目标。是的,PowerMock 可以解决此类问题;但问题是 PowerMock 并不是免费提供的——我已经花了很多时间用 PowerMock 调试 "issues";始终认为损坏与我们的生产代码无关。所以,尽管它很诱人;不使用 PowerMock 为我节省了 很多 时间;我可以用它来想出更好的设计。