当前位置: 代码网 > it编程>编程语言>Java > SpringBoot整合Testcontainers实现数据库与中间件集成测试

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

2026年07月30日 Java 我要评论
单元测试可以 mock 掉数据库,但集成测试需要真实环境。testcontainers 在测试时启动 docker 容器,用完后自动销毁。一、引入依赖<dependency> <

单元测试可以 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
@testcontainers
class userrepositorytest {

    @container
    static mysqlcontainer<?> mysql = new mysqlcontainer<>("mysql:8.0")
        .withdatabasename("testdb")
        .withusername("test")
        .withpassword("test");

    @dynamicpropertysource
    static void configureproperties(dynamicpropertyregistry registry) {
        registry.add("spring.datasource.url", mysql::getjdbcurl);
        registry.add("spring.datasource.username", mysql::getusername);
        registry.add("spring.datasource.password", mysql::getpassword);
    }

    @autowired
    private userrepository userrepository;

    @test
    void testsaveandfind() {
        user user = new user();
        user.setname("张三");
        user.setemail("zhangsan@test.com");
        userrepository.save(user);
        assertthat(user.getid()).isnotnull();
        user found = 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
@testcontainers
class rediscachetest {

    @container
    static genericcontainer<?> redis = new genericcontainer<>(
        dockerimagename.parse("redis:7-alpine"))
        .withexposedports(6379);

    @dynamicpropertysource
    static void configureproperties(dynamicpropertyregistry registry) {
        registry.add("spring.redis.host", redis::gethost);
        registry.add("spring.redis.port", () -> redis.getmappedport(6379));
    }

    @autowired
    private stringredistemplate redistemplate;

    @test
    void testsetandget() {
        redistemplate.opsforvalue().set("test:key", "hello");
        string value = redistemplate.opsforvalue().get("test:key");
        assertthat(value).isequalto("hello");
    }
}

四、共享容器

@testcontainers
abstract class abstractintegrationtest {

    @container
    static mysqlcontainer<?> mysql = new mysqlcontainer<>("mysql:8.0");

    @container
    static genericcontainer<?> redis = new genericcontainer<>(
        dockerimagename.parse("redis:7-alpine"))
        .withexposedports(6379);

    @dynamicpropertysource
    static void configureproperties(dynamicpropertyregistry registry) {
        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));
    }
}

到此这篇关于springboot整合testcontainers实现数据库与中间件集成测试的文章就介绍到这了,更多相关springboot testcontainers集成测试内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com