2012-06-28 37 views
6

我的代碼來嘲笑春天注入類:如何使用JMockit

class A extends X { 
    @Autowired 
    B b; 

    @Override 
    method() { 
     //do something 
     b.callMethodInB; 
     //do something 
    } 

} 

class B extends X { 
    @Autowired 
    C c; 

    @Override 
    method() { 
     //do something 
     c.callMethodInC; 
     //do something 
    } 

} 

我需要A測試method()。那麼如何模擬B。我正在使用Junit4和Jmockit。

+1

您是在問如何模擬B,或者如何在測試中將模擬B注入A? –

回答

0

由於Mocking框架通常依賴於DI(依賴注入),這基本上意味着您需要在方法簽名中傳輸模擬對象,所以我不確定這是可能的。

但看看here,它可能會給你一個方向如何做到這一點。

8

嘗試這樣:

import org.junit.*; 
import mockit.*; 

public class ATest 
{ 
    @Tested A a; 
    @Injectable B b; 

    @Test 
    public void testMethod() 
    { 
     a.method(); 

     new Verifications() {{ b.callMethodInB(); }}; 
    } 
} 

JMockit自動實例A與注射B實例(從模擬現場b),在測試類將其設置爲a領域。這與使用的DI框架無關(Spring)。

+0

這對我來說沒有**作用,也沒有'@Mocked B b;'在jmockit 1.30上工作 –