51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1082|回复: 1
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    擦汗
    10 小时前
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-12-22 13:27:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      现在写单元测试的重要性不言而喻,下边说明一下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。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 19:33 , Processed in 0.063801 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表