1.Testcontainers: 让码头工人去执行单测吧
Testcontainers: 让码头工人去执行单测吧
Testcontainers 是工人工人一个专为 JUnit 测试设计的 Java 库,它允许开发者使用 Docker 容器来运行轻量级和一次性服务实例,评分评分如数据库、源码源码Selenium web 浏览器等。工人工人本文将介绍如何使用 Testcontainers 的评分评分 1..5 版本,并简要说明它也支持 Go、源码源码小黑狗诱惑源码Python、工人工人Rust 和 Node.js 等其他语言。评分评分
在 Docker 环境下,源码源码Testcontainers 使得开发者能够用熟悉的工人工人语言在单元测试中运行所需的服务容器。它内置了许多中间件模块,评分评分其中 Database 模块包含了大多数数据库。源码源码如果这些模块无法满足需求,工人工人Testcontainers 也支持创建自定义容器。评分评分
以 Mysql 容器为例,源码源码源码类型 c s声明一个接口是推荐的做法,因为 Java 类只能单继承,而接口可以实现多继承。这样,如果测试类需要依赖多个容器,只需继承多个容器类即可。
❗️下面提供的宏定义函数源码写法虽然常见,但存在一些问题。虽然单元测试运行无误,日志显示确实启动了 mysql:8.0.,但运行的是 mysqlContainer 而不是声明的 mysqlContainer。正确的写法将在后续内容中介绍。
在 spring.datasource.url 中使用了官方推荐的 jdbc:tc: 格式:jdbc:tc:mysql:8.0.:///databasename。对于 Spring Boot 2.3.0 之前的qq筛密源码版本,需要手动指定驱动程序:org.testcontainers.jdbc.ContainerDatabaseDriver。
测试类继承接口后,可能会遇到线上启动容器报错的情况。本地测试运行良好,单测覆盖率超过 %,但上线后出现错误。
通过环境比对发现,php get 返回源码本地和线上环境存在差异。本地运行完全正常,而线上报错似乎是权限问题。经过搜索和尝试,发现公司集群将使用 containerd 而不是 docker,因此无法升级 docker。只能尝试其他方法。
通过 Debug 源代码,发现问题出在 spring.datasource.url 上,因为使用了 jdbc:tc:xxx 格式,Testcontainers 自动创建了一个一次性容器。
根据官方文档,可以通过两种方式获取临时数据库。修改 MysqlSpringTest 后,本地测试通过,但上线后仍然报错。尝试修改 Dockerfile 并推送镜像到仓库,但问题仍未解决。
通过设置 testcontainers.reuse.enable=true,可以实现在整个项目周期内只启动一次容器,后面模块复用容器。然而,ryuk 和 reuse 是不可兼得的。在本地环境中,可以忽略 ryuk,因为它会在电脑重启后消失。但在线上环境中,需要添加自定义命令节点来删除测试容器。
为了删除当前项目单测的测试容器,可以在 MysqlSpringTest 中给容器添加标签,并在线上流水线添加自定义脚本节点执行 docker rm 命令。
“我们去码头整点薯条,让码头工人去执行单测吧。”
2024-12-24 09:35
2024-12-24 08:54
2024-12-24 08:47
2024-12-24 08:03
2024-12-24 07:46
2024-12-24 07:40