如何使用Mockito覆盖抽象基类行为

时间:2013-03-26 16:59:51

标签: java 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();
  }
}

我希望在调用MyCallback时测试doIt()的行为。我使用Mockito创建一个模拟外部,然后可以external.doSomething()执行MyCallback.somethingHappened。我可以在第4行控制super.someCondtion的呼叫的返回值吗?我可以重新安排实现以提高可测试性吗? ExternalExternalAbstractCallback的实现无法更改。

1 个答案:

答案 0 :(得分:3)

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

解决方法:

  • 为回调添加getter / setter。
  • new MyCallback()移动到您在测试中覆盖的新的受保护助手方法