如何测试 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;
    }

您的问题是您创建了难以测试 的代码。

这里有两个选项:

  1. 您使用 PowerMock/PowerMockito 是为了允许您在此调用中注入一个模拟的 WSProxy 对象:wsProxy = new WSProxy(); 然后该模拟对象应该期待对 findAgentInfo().[=29 的调用=]
  2. 您将设计更改为使用依赖注入。换句话说:不是 class 直接 调用 new,而是使用其他方法来获取这样的 WSProxy 对象(例如通过构造函数接收一个)。

我通常推荐选项2;你可以通过学习如何创建 可测试的 代码(例如通过观看这些 videos)来实现目标。是的,PowerMock 可以解决此类问题;但问题是 PowerMock 并不是免费提供的——我已经花了很多时间用 PowerMock 调试 "issues";始终认为损坏与我们的生产代码无关。所以,尽管它很诱人;不使用 PowerMock 为我节省了 很多 时间;我可以用它来想出更好的设计。