2017-05-18 31 views
0

比方說,我有以下類:EasyMock的通話自動裝配對象的方法

public class A { 
@Autowired B b; 
public void doSomething(){ 
    b.doSomeThingElse(); 
} 


@Component 
@Autowired C c; 
public class B { 
public void doSomethingElse(){ 
    c.doIt(); 
} 

如何測試一個,當你知道我想嘲笑c.doIt()但想打電話b.doSomethingElse();與EasyMock的?

在此先感謝

回答

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

相關問題