什麼方法相當於以下:方法等效@InjectMocks
@Mock
MyType1 myType1;
@Autowired
@InjectMocks
MyType2 myType2;
我可以mock(MyType1.class)
取代@Mock
。
但我怎樣才能用方法調用來替換@InjectMocks
?類似這樣的:
injectMocks(MyType2.class)
什麼方法相當於以下:方法等效@InjectMocks
@Mock
MyType1 myType1;
@Autowired
@InjectMocks
MyType2 myType2;
我可以mock(MyType1.class)
取代@Mock
。
但我怎樣才能用方法調用來替換@InjectMocks
?類似這樣的:
injectMocks(MyType2.class)
爲什麼使用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
在你的應用程序上下文。
在Mockito中沒有公共API用於模擬注入。另外,因爲這個註釋主要是在測試中佈局的方式上進行的,所以它與測試的初始化階段相關。
雖然它可能會在未來某個時候發生變化。
但Mockito註釋字段可以通過MockitoJUnitRunner
或MockitoAnnotations.initMocks()
進行初始化。他們都創建模擬實例並執行注入。
另外我在你的代碼中看到你正在使用@Autowired
--因此可能是通過XML配置的spring東西。 @InjectMocks
並沒有真正開發用於其他依賴注入框架,因爲開發是由單元測試用例驅動的,而不是集成測試。
您可能想看看springockito,這是另一個嘗試在Spring中緩解Mockito模擬創作的項目。
希望幫助
鏈接已死亡。 –
@TarunMaganti我更新了鏈接。雖然現在似乎有幾個springockito叉,我認爲這是一個正式的,但在使用之前檢查;) – Brice
鏈接已經死了。 –
什麼是IOC? – jonney