javascript
SpringBoot+Junt+Mock测试方法
一、Mock測(cè)試定義
Mock 測(cè)試就是在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)造(如 HttpServletRequest 必須在Servlet 容器中才能構(gòu)造出來(lái))或者不容易獲取比較復(fù)雜的對(duì)象(如 JDBC 中的ResultSet 對(duì)象),用一個(gè)虛擬的對(duì)象(Mock 對(duì)象)來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法。Mock 最大的功能是幫你把單元測(cè)試的耦合分解開,如果你的代碼對(duì)另一個(gè)類或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗(yàn)證所調(diào)用的依賴的行為
使用場(chǎng)景:
當(dāng)一個(gè)方法中調(diào)用第三方服務(wù)(第三方接口、數(shù)據(jù)庫(kù)操作等)不可用時(shí),或者想要避開此方法的相關(guān)依賴,可以對(duì)這些第三方類或者依賴類mock掉,繞過(guò)(避開、屏蔽、跳過(guò))這些類的方法,讓其他服務(wù)正常運(yùn)行,按我們規(guī)定的返回值進(jìn)行處理
一個(gè)JUnit4的單元測(cè)試用例執(zhí)行順序?yàn)?#xff1a;
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
?
二、使用方法
1.添加依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId> </dependency> <dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId> </dependency>2.使用方法
1)類上添加@RunWith注解,啟動(dòng)junt的SpringRunner
2)使用@InjectMocks注解,將所有的mock類注入到這個(gè)對(duì)象實(shí)例中,因?yàn)闆](méi)有注入spring容器,必須要進(jìn)行實(shí)例化
3)使用@Mock注解,mock一個(gè)對(duì)象,模擬它的功能,一般出現(xiàn)在@InjectMocks注解對(duì)象方法中,當(dāng)使用@InjectMocks注解的對(duì)象方法時(shí),只要出現(xiàn)@Mock聲明的對(duì)象方法,全都執(zhí)行虛擬方法,不進(jìn)入具體實(shí)現(xiàn),因此屏蔽掉了@Mock對(duì)象方法,不會(huì)影響到其他方法
Mock測(cè)試類實(shí)現(xiàn)方法
@RunWith(SpringRunner.class) @Slf4j public class UserServiceMockTest {@InjectMocksprivate UserService userService=new UserServiceImpl();@Mockprivate UserMapper userMapper;@Beforepublic void setUserMapperMock(){log.info("進(jìn)入到@Before方法:");//MockitoAnnotations.initMocks(this);}@Testpublic void testUserServiceMock(){User user=new User();user.setId(2);user.setDescription("測(cè)試Mock");log.info("進(jìn)入到@Test方法:");Mockito.when(userService.queryUserById(user)).thenReturn(user);log.info("Mock執(zhí)行結(jié)果:{}",userService.testMock("END"));}@Afterpublic void testAfter(){log.info("進(jìn)入到@After方法:");} }UserServiceImpl類中實(shí)現(xiàn)方法
@Overridepublic User queryUserById(User user) {testMock(user.getDescription());return userMapper.selectByPrimaryKey(user.getId());}@Overridepublic String testMock(String str) {System.out.println(str);return str;}3.輸出結(jié)果
可以看到執(zhí)行順序是正確的,而且在UserServiceImpl類中,屏蔽掉了中queryUserById方法的userMapper相關(guān)方法,其他正常執(zhí)行
總結(jié)
以上是生活随笔為你收集整理的SpringBoot+Junt+Mock测试方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL乐观锁、共享锁、排他锁、行锁、
- 下一篇: InitializingBean接口使用