1

つまり、2 つのクラス:

class A{
  public int getValue(){
    return 5;
  }
}

class B{
  public int getValue(){
    A a = new A();
    return a.getValue();
  }
}

今、私はクラス Bのテストを書きたいと思っていますが、そのテストのためにクラス Aをモックしたいと思っています。問題は次のとおりです。

(このスニペットは、私の問題の単純なバージョンにすぎません。5 または smth を返さないように注意してください)

4

3 に答える 3

3

おそらくこれを行うにはいくつかのトリッキーな方法がありますが、簡単に言えば、あなたの書き方Bはモックを支持していません. B で A をインスタンス化する代わりに、A を B に注入してみてください

に変更することを検討してください

class B {
  private A a;
  public void setA(A a) {
    this.a=a;
  }
  public int getValue(){
    return a.getValue();
  }
}

aで初期化することもprivate A a = new A()できますが、セッターを提供すると、テスト用にモックを挿入できます。


編集: B を単体テストに適したものに書き換えるのが難しい場合でも、Powermock などのバイトコード操作を行うモック フレームワークを利用できます。これは、あなたが望むものを達成する例です:

http://code.google.com/p/powermock/wiki/MockConstructor

于 2013-09-10T09:59:28.693 に答える
1

モッキングは を使用instance variableして行うことができsetter、同じものを使用できます。

以下の2つのリンクは、あなたがやろうとしている上記のことに役立つ可能性があります

Mockito、EasyMock などを使用した JUnit のモック Java でローカル変数をモックする方法は?

于 2013-09-10T10:07:54.540 に答える
0

クラスのモックを使用して、他のクラスの機能をテストするために必要なデータを取得します。この場合、クラス A は 5 を返すだけなので、モック クラスは使用しません。ただし、クラス A 内のビジネス ロジックである場合は、モック クラスを使用する必要があります。新しいクラスを作成し、元のクラスに同じメソッド名を追加し、ロジックを実行せずにそこから値を返すだけです。

于 2013-09-10T10:05:37.147 に答える