2017-05-18 9 views

答えて

1

@Autowiredはいいですが、私たちはテストする方法について忘れさせる傾向があります。 bcのセッターを追加するだけです。

C c = mock(C.class); 
c.doIt(); 

replay(c); 

B b = new B(); 
b.setC(c); 
A a = new A(); 
a.setB(b); 

a.doSomething(); 

verify(c); 

またはコンストラクタインジェクションを使用してください。この場合

C c = mock(C.class); 
c.doIt(); 

replay(c); 

B b = new B(c); 
A a = new A(b); 

a.doSomething(); 

verify(c); 

、あなたのクラスは次のようになります。

public class A { 
    private B b; 
    public A(B b) { // Spring will autowired by magic when calling the constructor 
     this.b = b; 
    } 
    public void doSomething() { 
     b.doSomeThingElse(); 
    } 
} 

@Component 
public class B { 
    private C c; 
    public B(C c) { 
     this.c = c; 
    } 
    public void doSomethingElse(){ 
     c.doIt(); 
    } 
} 
+0

感謝。しかし、私は使用しました:ReflectionTestUtils.setField、しかし、あなたも同様に動作するでしょう – user1345883

+0

それは同様に動作します。私はそれに答えることができましたが、私はそれを本当に好きではありません。必要でないときカプセル化を中断する – Henri