【问题标题】:unit testing in springboot - best approachspringboot中的单元测试 - 最佳方法
【发布时间】:2022-01-31 15:59:21
【问题描述】:

我试图找出在 SpringBoot 应用程序中进行单元测试的最佳方法是什么。在上周五之前,我认为最好的方法是测试:

  • 具有 mockmvc 和模拟服务的控制器
  • 具有模拟存储库的服务
  • 带有模拟数据库的存储库
  • 主要使用SpringBootTest 进行集成测试。

但后来我看了这个 -Ian Cooper - TDD, Where Did It All Go Wrong,我意识到我的测试是实现测试,我应该只模拟数据库、文件系统、其他系统,而不是我的应用程序。

我想知道我应该怎么做?因为当我自己创建所有对象时,它仍然是“测试实现”,所以我可以将SpringBootTestMockBean 一起使用,但这会非常慢。

比我聪明的人可以分享他在这方面的经验或想法吗?

【问题讨论】:

    标签: spring-boot unit-testing tdd


    【解决方案1】:

    如果您尝试为已经编写的代码库编写测试,我会从集成测试开始。此外,使用内存中的 H2 DB 模拟 DB 可以执行测试套件并清除下一个测试套件的数据,甚至可以将数据保留在几个相互关联的测试中,然后删除。

    Spring 是围绕依赖注入而设计的,因此在模拟其他存储库(可能是 JPA)的同时使用它来测试您的服务。如今,JPA 已降到最低限度,因此您可以将其放在最后,因为您想专注于业务逻辑测试。

    【讨论】:

      【解决方案2】:

      我建议如下:

      1. 在 src/test/resources 中使用带有嵌入式 H2 数据库的 different application.properties

      2. 在您的 src/test/resources 中使用 data.sql 为 H2 DB 播种,这将被自动拾取。

      3. 使用MockMVC模拟http客户端。

      4. 其他一切都应该是生产。

      即通过使用仅测试配置插入测试数据库来使用控制反转 (IOC) 的原理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 2011-02-02
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        相关资源
        最近更新 更多