Spring Boot测试优化:理解并利用@SpringBootTest(webEnvironment = NONE)提升测试性能

Spring Boot测试优化:理解并利用@SpringBootTest(webEnvironment = NONE)提升测试性能

码农世界 2024-05-21 前端 64 次浏览 0个评论

目录

  • 一、@SpringBootTest 注解解析
  • 二、webEnvironment 参数详解
  • 三、webEnvironment = NONE 的优势
  • 四、 区别总结
  • 五、应用场景总结

    一、@SpringBootTest 注解解析

    @SpringBootTest 是Spring Boot提供的用于驱动集成测试的关键注解,它可以自动配置并启动一个ApplicationContext,方便我们在其中注入并测试实际运行环境下的各个Bean。

    二、webEnvironment 参数详解

    webEnvironment 属性控制在测试中初始化Spring Boot应用环境。其可选值有:

    • DEFINED_PORT 或 MOCK: 启动一个真实的嵌入式Web服务器。
    • RANDOM_PORT: 启用嵌入式Web服务器,并绑定到随机端口。
    • NONE: 不启动任何Web服务器,仅加载核心ApplicationContext。

      三、webEnvironment = NONE 的优势

      设置Spring Boot在运行测试时不初始化嵌入式Web服务器,无需模拟HTTP请求或验证控制器行为的测试(例如,对服务层方法、DAO或其他非Web组件的测试),可以大大缩短测试启动和执行的时间。

      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
      public class MyServiceTest {
          @Autowired
          private MyService myService;
          @Test
          public void testMyServiceMethod() {
              // 测试逻辑...
          }
      }
      

      带有Web环境的测试案例,通过WebTestClient模拟HTTP请求,验证用户控制器的行为,因此需要完整的Web环境:

      // 带有Web环境的测试示例
      @SpringBootTest
      public class UserControllerTest {
          @Autowired
          private WebTestClient webTestClient;
          @Test
          public void testGetUserById() {
              webTestClient.get().uri("/users/{id}", 1L)
                      .exchange()
                      .expectStatus().isOk()
                      .expectBody(User.class);
          }
      }
      

      不带有Web环境的测试案例,仅关注UserService的逻辑,无需网络环境,采用webEnvironment = NONE来加速测试启动和执行:

      // 不带有Web环境的测试示例
      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
      public class UserServiceTest {
          @Autowired
          private UserService userService;
          @Test
          public void testFindUserById() {
              User user = userService.findById(1L);
              assertNotNull(user);
              assertEquals("John Doe", user.getName());
          }
      }
      

      四、 区别总结

      • 带Web环境:适用于需要模拟真实HTTP请求并对控制器、过滤器、拦截器等Web层组件进行测试的场景,但启动和运行速度相对较慢。

      • 无Web环境:适合于服务层、数据访问层或者纯业务逻辑的单元测试,能显著减少测试启动时间,提高测试效率。

        五、应用场景总结

        • 若测试涉及路由、控制器响应、Session管理等功能,则应当保留完整的Web环境以保证测试完整性。

        • 当你的测试主要关注业务逻辑、数据库操作或服务层组件的交互时,强烈建议使用 webEnvironment = NONE。

转载请注明来自码农世界,本文标题:《Spring Boot测试优化:理解并利用@SpringBootTest(webEnvironment = NONE)提升测试性能》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,64人围观)参与讨论

还没有评论,来说两句吧...

Top