Springboot+Junit5微服务单元测试编写实践

发表于:2021-12-16 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mrwho    来源:稀土掘金

#
JUnit
分享:
  现在写单元测试的重要性不言而喻,下边说明一下Junit5测试的会用到的主要注解和方法。PS:常用开发工具都可以自动生成Junit测试类。
  1. 单元测试命名
  在项目种我选择的是should...when的写法,但需注意方法命名时不要过长,过长反而导致难于阅读和理解
  2. 常用注解
  · 类注解
  @SpringbootTest 加在类上,会启动整个环境;做集成测试;由于controller层逻辑少,一般用在controller层;比较慢。
  @ExtendWith(SpringExtension.class) Junit5中用来替代Junit4的@RunWith(SpringJUnit4ClassRunner.class),会启动Spring的上下文。
  @ContextConfiguration   指定加载ApplicationContext的配置文件或配置类,一般和@ExtendWith(SpringExtension.class)结合使用。
  @ExtendWith(MockitoExtension.class) Junit5中用来替代JUnit4 @RunWith(MockitoJUnitRunner.class)。不需要Spring上下文时用该注解。
  · 模拟类或接口的注解
  @Mock、@InjectMocks、@Spy
  Mockito库提供的注解;@Mock创建一个Mock对象,@InjectMocks创建一个实例,尝试将其它有@Mock或@Spy的对象注入到该实例中;@Spy默认会调用真实的方法,@Mock默认不执行
  @MockBean、@SpyBean
  Spring Boot包装Mockito库提供的注解;@MockBean创建的对象默认会加入Spring的上下文中,如果Spring的上下文存在则替换;@MockBean和@SpyBean区别同@Mock和@Spy的区别
  · 方法注解
  Test 同Junit4
  · 常用测试方法
    - Mockito.when().thenReturn()
    - Mockito.doNothing().when(类).方法
    - Assertions.assertTrue
    - Assertions.assertNotNull
    - Mockito.verify(bean, times(次数)).方法
    - Assertions.assertThrows(Class expectedType, () -> 类.方法)
  3. 测试方法结构
  单元测试采用Given...When...Then的结构,即准备数据,用mock模拟方法返回值执行,调用测试方法验证,用assert等验证方法返回结果。
  数据库的单元测试
  @MybatisPlusTest
  只注入MybatisPlus相关Bean做单元测试,比较像@Mybatis注解,由mybatis-plus的3.4.0版本后的mybatis-plus-boot-starter-test模块提供。
  可以在做数据库的单元测试时不使用@SpringBootTest注解启动整个工程。
  接入层的单元测试
  @WebMvcTest
  同样用来做MVC层的单元测试,只注入MVC层相关的Bean。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
价值398元的测试课程免费赠送,填问卷领取吧!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号