如何防止 jdbc 在单元测试期间尝试连接到 mysql 数据库

how to prevent jdbc from trying to connect to a mysql database during unit testing

我正在申请一个学校项目,但我 运行 遇到了一个问题,当我尝试 运行 单元测试时,它会尝试连接到数据库在启动应用程序时,这不是测试所必需的(因为它将被模拟),并且在 CI/CD 管道中不可用。

jdbc connection error

我正在 Java Maven Springboot 中构建我的项目,想知道如何防止它在 运行 测试时尝试连接到数据库。

这是我存储库的 link:https://gitlab.com/kwetter_jack/Kwetter_posts/-/tree/ci_cd_setup

您的测试 类 具有 @SpringBootTest 注释,它将启动 Spring 应用程序上下文 - 当您的应用程序使用数据库时,测试也会尝试设置和使用数据库连接。

最简单的解决方案是删除注释,这样测试就不会再尝试连接到数据库。您可能需要模拟更多依赖项,因为 Spring 不再为您创建这些依赖项。您还可以查看 https://www.baeldung.com/spring-boot-testing 以了解如何更改测试的其他想法。

或者,如果您确实想要/需要应用程序上下文 运行,您可以为定义和使用内存数据库的测试添加 application.yaml,以便测试可以连接到 -有关如何执行此操作的详细信息,请参阅 https://www.baeldung.com/spring-boot-h2-database

只需将 spring.datasource 下的值更改为 H2 database 以防止 应用程序连接真实数据库。

Test application.yml

仅供参考,您无需从原始 application.yml 复制所有配置,只需复制一些您需要覆盖的配置。

当我调查 spring boot H2 in-memory 数据库时(正如 Chris Olive 和 Paranaaan 所建议的),我还遇到了使用测试容器的选项。在查看这个之后,我发现这使项目能够创建一个带有 MySQL 图像的临时 docker 容器,我可以在项目测试期间使用它,考虑到我计划使用 docker 无论如何,为了我的微服务项目的集成测试,我尝试了这个并且它像我希望的那样工作。

如果有人对我使用的测试容器解决方案感兴趣,可以在这里找到信息:

https://www.testcontainers.org/modules/databases/mysql/