0

以下のような4つのクラスがあります。

public class A(){

  public void getOne(){

    B objB = new B();
    String x = objB.getTwo();
  }
}



public class B(){

  public String getTwo(){

    C objC = new C();
    return objC.getThree();
  }
}


public class C(){

  D objD;

  public String getThree(){

    return objD.getFour();
  }
}

public class D(){

  public String getFour(){

    return "hi";
  }
}

上記のコードでは、Spring によって注入されているクラスCが含まれています。class のメソッドobjDをテストしようとすると、メソッド呼び出しが class に到達したときにインスタンス化されていないため (したがって例外)、null ポインター例外が発生します。サブサブクラスに、そのサブサブクラスがSpringによって依存性注入されたメソッドがある場合、そのようなメソッドをテストするにはどうすればよいですか?getOne()ACobjD

4

2 に答える 2

1

テストは失敗しますが、これは良いことです。なぜなら、Spring がそれ自体で作成しないオブジェクト内に依存関係を注入する方法がないからです。を行っている場合new C()、Spring はそれについて何も知らず、objDこの C インスタンス内に注入することはありません。

D は C に注入し、B は A に注入する必要があります。このようにして、モック B を注入することで A をテストできます。モック C を注入することで B をテストでき、モック D を注入することで C をテストできます。

于 2012-11-28T22:11:16.777 に答える
0

objectCはSpringで注入されている可能性がありますが、オペレーターを使用して をインスタンス化しているため、 B(したがってA)でそれを認識していません.newC

new制御の反転に関しては汚い言葉であり、 と の両方Aで見られBます。

理想的には、 のテストを書くとき、それが知らないもの (この場合はと)Aに依存したくないでしょう。のインスタンスをモック/スタブして、それを に注入したいでしょう。に関しても同じことをお勧めします。CDBABC

于 2012-11-28T22:11:49.090 に答える