如何用Mockito重写抽象基类行为



我有这样的代码:

class Outer {
  private External external;
  class MyCallback extends ExternalAbstractCallback {
    void somethingHappened() { if (super.someCondition()) { ... }; }
  }
  public Outer() {
     external = ...;
  }
  public setExternal(External e) { external = e; } // test support
  public void doIt() {
    external.setCallback(new MyCallback());
    external.doSomething();
  }
}

我想测试MyCallbackdoIt()被调用时的行为。我使用Mockito创建一个mock External,然后可以让external.doSomething()执行MyCallback.somethingHappened。我可以在第4行控制调用super.someCondtion的返回值吗?我可以重新安排实现以提高可测试性吗?ExternalExternalAbstractCallback的实现不能更改。

你的问题是你不能用Mockito模拟new。简而言之,您想要测试的代码永远不应该调用new

解决方案:

  • 为回调添加getter/setter。
  • new MyCallback()移动到一个新的受保护的助手方法中,并在测试中重写

相关内容

  • 没有找到相关文章

最新更新