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.doSomething()、MyCallback.somethingHappened を実行できます。4 行目の呼び出しの戻り値を制御できますsuper.someCondtionか? テスト容易性を向上させるために実装を再配置できますか? Externalとの実装はExternalAbstractCallback変更できません。

4

1 に答える 1

3

あなたの問題は、newMockito でモックできないことです。一言で言えば、テストしたいコードは決して呼び出してはいけませんnew

回避策:

  • コールバックのゲッター/セッターを追加します。
  • new MyCallback()テストでオーバーライドする新しい保護されたヘルパー メソッドに移動します。
于 2013-03-26T17:05:06.197 に答える