2012-10-12 45 views
9

什麼方法相當於以下:方法等效@InjectMocks

@Mock 
MyType1 myType1; 

@Autowired 
@InjectMocks 
MyType2 myType2; 

我可以mock(MyType1.class)取代@Mock

但我怎樣才能用方法調用來替換@InjectMocks?類似這樣的:

injectMocks(MyType2.class) 

回答

2

爲什麼使用JUnit測試Autowired?由於您在嘲笑MyType2的依賴關係,因此您在編寫測試時必須知道它的具體實現。

然後你不需要也不應該使用Spring或任何注入框架來創建你想測試的MyType2的實例。直接在你的測試初始化​​中創建它!我知道在使用IoC框架多年後,很難編寫myType2 = new MyType2Impl(mock(myType1.class)),但它確實會使測試變得更簡單和更快(因爲沒有構建應用程序上下文)。 例如: -

@Before 
public void setup() { 
    myType1 = mock(MyType1.class); 
    myType2 = new MyType2Impl(myType1); 
} 

但是,如果你真的想用國際奧委會JUnit測試,使用springockito曾建議由布萊斯,並建立自己的模擬MyType1在你的應用程序上下文。

+1

鏈接已經死了。 –

+0

什麼是IOC? – jonney

8

在Mockito中沒有公共API用於模擬注入。另外,因爲這個註釋主要是在測試中佈局的方式上進行的,所以它與測試的初始化階段相關。

雖然它可能會在未來某個時候發生變化。

但Mockito註釋字段可以通過MockitoJUnitRunnerMockitoAnnotations.initMocks()進行初始化。他們都創建模擬實例並執行注入。

另外我在你的代碼中看到你正在使用@Autowired--因此可能是通過XML配置的spring東西。 @InjectMocks並沒有真正開發用於其他依賴注入框架,因爲開發是由單元測試用例驅動的,而不是集成測試。

您可能想看看springockito,這是另一個嘗試在Spring中緩解Mockito模擬創作的項目。

希望幫助

+0

鏈接已死亡。 –

+1

@TarunMaganti我更新了鏈接。雖然現在似乎有幾個springockito叉,我認爲這是一個正式的,但在使用之前檢查;) – Brice