news 2026/7/30 1:35:34

SpringBoot 整合 Testcontainers——数据库与中间件集成测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 整合 Testcontainers——数据库与中间件集成测试

单元测试可以 Mock 掉数据库,但集成测试需要真实环境。Testcontainers 在测试时启动 Docker 容器,用完后自动销毁。

一、引入依赖

<dependency><groupId>org.testcontainers</groupId><artifactId>testcontainers</artifactId><version>1.19.3</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>mysql</artifactId><version>1.19.3</version><scope>test</scope></dependency>

二、MySQL 集成测试

@SpringBootTest@TestcontainersclassUserRepositoryTest{@ContainerstaticMySQLContainer<?>mysql=newMySQLContainer<>("mysql:8.0").withDatabaseName("testdb").withUsername("test").withPassword("test");@DynamicPropertySourcestaticvoidconfigureProperties(DynamicPropertyRegistryregistry){registry.add("spring.datasource.url",mysql::getJdbcUrl);registry.add("spring.datasource.username",mysql::getUsername);registry.add("spring.datasource.password",mysql::getPassword);}@AutowiredprivateUserRepositoryuserRepository;@TestvoidtestSaveAndFind(){Useruser=newUser();user.setName("张三");user.setEmail("zhangsan@test.com");userRepository.save(user);assertThat(user.getId()).isNotNull();Userfound=userRepository.findById(user.getId()).orElse(null);assertThat(found).isNotNull();assertThat(found.getName()).isEqualTo("张三");}}

三、Redis 集成测试

<dependency><groupId>org.testcontainers</groupId><artifactId>redis</artifactId><version>1.19.3</version><scope>test</scope></dependency>
@SpringBootTest@TestcontainersclassRedisCacheTest{@ContainerstaticGenericContainer<?>redis=newGenericContainer<>(DockerImageName.parse("redis:7-alpine")).withExposedPorts(6379);@DynamicPropertySourcestaticvoidconfigureProperties(DynamicPropertyRegistryregistry){registry.add("spring.redis.host",redis::getHost);registry.add("spring.redis.port",()->redis.getMappedPort(6379));}@AutowiredprivateStringRedisTemplateredisTemplate;@TestvoidtestSetAndGet(){redisTemplate.opsForValue().set("test:key","hello");Stringvalue=redisTemplate.opsForValue().get("test:key");assertThat(value).isEqualTo("hello");}}

四、共享容器

@TestcontainersabstractclassAbstractIntegrationTest{@ContainerstaticMySQLContainer<?>mysql=newMySQLContainer<>("mysql:8.0");@ContainerstaticGenericContainer<?>redis=newGenericContainer<>(DockerImageName.parse("redis:7-alpine")).withExposedPorts(6379);@DynamicPropertySourcestaticvoidconfigureProperties(DynamicPropertyRegistryregistry){registry.add("spring.datasource.url",mysql::getJdbcUrl);registry.add("spring.datasource.username",mysql::getUsername);registry.add("spring.datasource.password",mysql::getPassword);registry.add("spring.redis.host",redis::getHost);registry.add("spring.redis.port",()->redis.getMappedPort(6379));}}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!每周更新 Java/Python/MySQL 实战干货,不让你白来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 1:35:26

Burpsuite实战:破解Token防护的暴力破解攻防演练

1. 项目概述&#xff1a;从靶场到实战的攻防思维跃迁在网络安全的学习路径上&#xff0c;从理论到实践之间&#xff0c;往往横亘着一道名为“环境”的鸿沟。很多朋友啃完了厚厚的教材&#xff0c;背熟了各种漏洞原理&#xff0c;但一上手面对一个真实的、哪怕是最简单的登录框&…

作者头像 李华
网站建设 2026/7/30 1:30:42

第3讲|Prompt 工程与 API 调用:AI 产品经理的第一个核心实操能力

写在前面:Prompt 不是玄学技巧,而是 AI 产品的最小原型 很多人学习 AI 产品经理,最先接触的就是 Prompt。 他们会收藏大量提示词模板,比如: “你是一个资深专家……” “请一步一步思考……” “请用表格输出……” “请从专业角度分析……” “请模仿某某风格……” …

作者头像 李华
网站建设 2026/7/30 1:30:01

2026年降AI率工具测评:20款实测,只有这几个真有免费试用

2个实测免费的降AIGC率工具&#xff0c;顺利通过ai率查重&#xff01; AI 检测本身就没有公开 算法 &#xff0c;降 AI 工具更像黑箱。如果降AI率连一次免费试用都不给&#xff0c;那风险太大了。万一AI率没有降下来&#xff0c;又不能退&#xff0c;少则几元多则几十。 对于学…

作者头像 李华
网站建设 2026/7/30 1:25:44

2026 年电钢琴选购指南:避坑参数解析与十款高性价比机型实测

很多新手在挑选第一台电钢琴时&#xff0c;最容易陷入的误区就是被外观或花哨的功能吸引&#xff0c;却忽略了决定练琴效果的核心——手感与音源。我见过太多朋友因为贪便宜买了61键的“玩具琴”&#xff0c;结果练了半年发现手型完全错误&#xff0c;手指发力习惯难以纠正&…

作者头像 李华
网站建设 2026/7/30 1:24:42

OpenVINO加速Qwen3-TTS:本地化语音合成优化方案

1. 项目概述&#xff1a;当OpenVINO遇上Qwen3-TTS上周在部署一个智能客服demo时&#xff0c;我发现用传统TTS方案处理长文本经常出现卡顿。测试了多个开源模型后&#xff0c;最终选择Qwen3-TTSOpenVINO的组合方案——不仅将合成速度提升了3倍&#xff0c;还能在Intel集显笔记本…

作者头像 李华
网站建设 2026/7/30 1:19:50

UVC摄像头

1 版本历史 1.1 UVC uvc_version UVC 1.0: Sep-4-2003 UVC 1.1: Jun-1-2005 UVC 1.5: August-9-2012, H.264 video codec. Linux 4.5 introduces UVC 1.5, but does not support H264.1.2 V4L版本历史 Video4Linux取名的灵感来自1992 Video for Windows&#xff08;V4W&#xf…

作者头像 李华