2

我有这样的代码:

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,然后可以external.doSomething()执行 MyCallback.somethingHappened。我可以控制第super.someCondtion4 行调用的返回值吗?我可以重新安排实现以提高可测试性吗?External和的实现ExternalAbstractCallback不能更改。

4

1 回答 1

3

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

解决方法:

  • 为回调添加一个 getter/setter。
  • 移动new MyCallback()到您在测试中覆盖的新受保护辅助方法
于 2013-03-26T17:05:06.197 回答