我正在为一个学校项目申请,但是我遇到了这样的问题:当我尝试运行单元测试时,它会在启动应用程序时尝试连接到数据库,这不是测试所需要的(因为它将被模拟),并且在CI/CD管道中不可用。
jdbc连接错误
我正在Java Maven Springboot中构建我的项目,并想知道如何在运行我的测试时防止它试图连接到数据库。
这里是到我的仓库的链接:https://gitlab.com/kwetter_jack/Kwetter_posts/-/tree/ci_cd_setup
您的测试类有@SpringBootTest
注释,它将启动一个Spring应用程序上下文-由于您的应用程序使用数据库,测试也将尝试设置和使用数据库连接。
最简单的解决方案是删除注释,以便测试不再尝试连接到数据库。您可能需要模拟更多的依赖项,因为Spring不再为您创建这些依赖项。您还可以查看https://www.baeldung.com/spring-boot-testing,了解如何更改测试的其他一些想法。
或者,如果您确实想要/需要运行应用程序上下文,您可以为定义并使用内存DB的测试添加application.yaml
,以便测试有东西可以连接-请参阅https://www.baeldung.com/spring-boot-h2-database了解如何做到这一点。
只需将spring.datasource
下的值更改为H2 database
即可应用程序连接真实的数据库。
测试application.yml
供参考,您不需要从原始应用程序复制所有配置。只有一些你需要重写的配置。
当我在调查春季启动H2内存数据库(由Chris Olive和paranaan建议)时,我也遇到了使用测试容器的选项。在研究了这个之后,我看到这使项目能够创建一个带有MySQL映像的临时docker容器,我可以在我的项目测试期间使用,考虑到我计划使用docker进行我的微服务项目的集成测试,我尝试了这个,它像我希望的那样工作。
如果有人对我使用的测试容器解决方案感兴趣,可以在这里找到相关信息:
https://www.testcontainers.org/modules/databases/mysql/