場(chǎng)景1:
對(duì)classA做單測(cè),A中引用了classB畴椰,classC的方法瓣喊,希望classB真實(shí)執(zhí)行,classC走mock芽世。
classB b上還需要增加@Autowired注解挚赊,否則classB引用的服務(wù)就空指針了。
1:使用mock注解來(lái)mock掉對(duì)應(yīng)接口的實(shí)現(xiàn)
@Mock
private TestService testService
標(biāo)識(shí)TestService為空方法济瓢,執(zhí)行該服務(wù)的任何方法荠割,都不會(huì)執(zhí)行內(nèi)部的邏輯,直接返回null∶镳校可以通過(guò)when夺克,thenReturn來(lái)mock方法的返回值。
2:使用autowired注解實(shí)現(xiàn)接口的真實(shí)注入
@Autowired
private TestService testService
從上下文中引入service嚎朽,調(diào)用service的方法铺纽,都會(huì)按照代碼邏輯執(zhí)行一遍
3:使用injectMock+mock 實(shí)現(xiàn)接口內(nèi)部依賴的某個(gè)接口的mock
@InjectMocks
private TestService testService
比如TestService中引用了ServiceA,serviceB哟忍,想要mock掉這兩個(gè)服務(wù)的邏輯狡门,只需要使用Mock注解即可。
@Mock
private ServiceA serviceA;
InjectMocks注解會(huì)自動(dòng)把標(biāo)識(shí)了mock注解的服務(wù)mock掉锅很。