Mockito的使用(二)——@InjectMocks、@Spy、@Mock
項(xiàng)目中,有些函數(shù)需要處理某個(gè)服務(wù)的返回結(jié)果,而在對(duì)函數(shù)單元測(cè)試的時(shí)候,又不能啟動(dòng)那些服務(wù),這里就可以利用Mockito工具,其中有如下三種注解:
@InjectMocks:創(chuàng)建一個(gè)實(shí)例,簡單的說是這個(gè)Mock可以調(diào)用真實(shí)代碼的方法,其余用@Mock(或@Spy)注解創(chuàng)建的mock將被注入到用該實(shí)例中。
@Mock:對(duì)函數(shù)的調(diào)用均執(zhí)行mock(即虛假函數(shù)),不執(zhí)行真正部分。
@Spy:對(duì)函數(shù)的調(diào)用均執(zhí)行真正部分。
Mockito中的Mock和Spy都可用于攔截那些尚未實(shí)現(xiàn)或不期望被真實(shí)調(diào)用的對(duì)象和方法,并為其設(shè)置自定義行為。二者的區(qū)別在于Mock不真實(shí)調(diào)用,Spy會(huì)真實(shí)調(diào)用。
具體的工作中會(huì)遇到的具體案例:
問題1:
實(shí)例對(duì)象的注入對(duì)象和注入對(duì)象含有相同的屬性。舉例說明:實(shí)例對(duì)象ClassA中含有注入對(duì)象ClassB、ClassC,實(shí)例對(duì)象ClassB中也含有ClassC。
問題2:
實(shí)例對(duì)象中含有太多的注入類,并且大部分的代碼走真實(shí)調(diào)用方式,只想要數(shù)據(jù)庫操作的部分代碼走M(jìn)ock調(diào)用的方式。
對(duì)于上面兩個(gè)問題其實(shí)要解決的根本問題就是:如何解決Mock注入沖突,同時(shí)注入兩個(gè)甚至多個(gè)對(duì)象中?
首先介紹一下Mockito給我們提供的一些工具類:通過AopTestUtils對(duì)切面對(duì)象進(jìn)行mock
上面的博文中提供給了我們很好的一個(gè)思路,我們可以通過切面方式把每一個(gè)Mock對(duì)象都放到實(shí)例對(duì)象中。
以下是我的解決方案;
首先:將實(shí)例對(duì)象注入,同時(shí)使用Autowired和@InjectMocks注解
再者,將Mock對(duì)象通過反射寫入到實(shí)例對(duì)象中
最后,規(guī)定好返回參數(shù)就可以進(jìn)行流程的測(cè)試了。
總結(jié)
以上是生活随笔為你收集整理的Mockito的使用(二)——@InjectMocks、@Spy、@Mock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mockito的使用(一)——@Inje
- 下一篇: Java代码实现负载均衡六种算法(强烈建