登录
首页 >  文章 >  java教程

SpringBoot3.0嵌入式MongoDB集成测试方法

时间:2025-12-19 09:30:52 190浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

从现在开始,努力学习吧!本文《Spring Boot 3.0 集成测试嵌入式 MongoDB方法》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

如何在 Spring Boot 3.0.0 中集成并测试嵌入式 MongoDB

本文详细介绍了在 Spring Boot 3.0.0 环境下使用嵌入式 MongoDB 进行测试的正确配置方法。针对 Spring Boot 2.x 升级到 3.x 后,de.flapdoodle.embed.mongo 依赖和配置属性发生的变化,提供了具体的 pom.xml 依赖更新和 application.properties 配置调整方案,以解决连接超时问题,确保测试环境的顺利搭建。

Spring Boot 3.x 中嵌入式 MongoDB 的配置与测试

在 Spring Boot 应用程序中,使用嵌入式 MongoDB 是进行集成测试的常见实践,它允许开发者在不依赖外部 MongoDB 实例的情况下运行测试,极大地简化了测试环境的搭建。然而,随着 Spring Boot 版本的迭代,特别是从 2.x 升级到 3.x,一些底层库和配置方式可能发生变化,导致原有的设置不再兼容。本文将详细阐述在 Spring Boot 3.0.0 环境下,如何正确配置和使用 de.flapdoodle.embed.mongo 来实现嵌入式 MongoDB 的测试。

问题背景与现象

当尝试将基于 Spring Boot 2.x 的嵌入式 MongoDB 测试配置迁移到 Spring Boot 3.0.0 时,开发者可能会遇到连接超时错误,例如 org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused: no further information}}]}。这通常是由于 de.flapdoodle.embed.mongo 库与 Spring Boot 3.x 的兼容性问题以及配置属性命名空间的变化所致。

核心解决方案

解决此问题的关键在于更新 de.flapdoodle.embed.mongo 依赖到支持 Spring Boot 3.x 的版本,并调整 application.properties 中 MongoDB 版本配置的命名空间。

1. 更新 de.flapdoodle.embed.mongo 依赖

在 Spring Boot 3.x 中,de.flapdoodle.embed.mongo 库引入了一个新的 artifact ID 来专门支持 Spring Boot 3.x 的集成。您需要将 pom.xml 中原有的嵌入式 MongoDB 依赖进行替换。

原有依赖(Spring Boot 2.x 兼容):

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>3.5.3</version>
    <scope>test</scope>
</dependency>

更新后的依赖(Spring Boot 3.x 兼容):

请注意 artifactId 的变化,它现在是 de.flapdoodle.embed.mongo.spring30x。同时,建议使用该库的最新稳定版本。在撰写本文时,4.5.2 是一个可用的版本,您可以通过 Maven Central 仓库查找最新版本。

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId>
    <version>4.5.2</version> <!-- 请检查并使用最新版本 -->
    <scope>test</scope>
</dependency>

2. 调整 MongoDB 版本配置

在 Spring Boot 3.x 中,嵌入式 MongoDB 的版本配置属性不再由 Spring 框架直接管理,而是由 de.flapdoodle 库自己的命名空间解析。因此,您需要修改 application.properties 文件中的配置项。

原有配置(Spring Boot 2.x 兼容):

spring.data.mongodb.database=test
spring.data.mongodb.port=27017
spring.mongodb.embedded.version=4.0.2

更新后的配置(Spring Boot 3.x 兼容):

将 spring.mongodb.embedded.version 更改为 de.flapdoodle.mongodb.embedded.version。

spring.data.mongodb.database=test
spring.data.mongodb.port=27017
de.flapdoodle.mongodb.embedded.version=4.0.2

请注意,spring.data.mongodb.database 和 spring.data.mongodb.port 这些 Spring Data MongoDB 的标准配置保持不变。

示例:集成测试类

完成上述依赖和配置的更新后,您的 MongoDB 集成测试类通常不需要进行任何修改。@DataMongoTest 注解会负责配置嵌入式 MongoDB 实例,并注入 MongoTemplate 供测试使用。

import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import static org.assertj.core.api.Assertions.assertThat;

@DataMongoTest
@ExtendWith(SpringExtension.class)
public class MongoDbSpringIntegrationTest {

  @DisplayName("给定一个对象,当使用 MongoDB template 保存时,对象应被成功保存")
  @Test
  public void test(@Autowired MongoTemplate mongoTemplate) {
    // 准备数据
    DBObject objectToSave = BasicDBObjectBuilder.start()
        .add("key", "value")
        .get();

    // 执行保存操作
    mongoTemplate.save(objectToSave, "collection");

    // 验证结果
    assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key")
        .containsOnly("value");
  }
}

注意事项与总结

  1. 版本兼容性: 始终关注 de.flapdoodle.embed.mongo 库与您使用的 Spring Boot 版本的兼容性。随着 Spring Boot 版本的更新,flapdoodle 库也可能发布新的 artifact ID 或版本来适配。
  2. 查找最新版本: 在 Maven Central 仓库(https://mvnrepository.com/artifact/de.flapdoodle.embed/de.flapdoodle.embed.mongo.spring30x)上查找 de.flapdoodle.embed.mongo.spring30x 的最新版本,以确保获取最新的功能和 bug 修复。
  3. 配置命名空间: 记住 de.flapdoodle 相关的配置属性现在拥有自己的命名空间,不再统一归属 spring.mongodb.embedded。
  4. 测试隔离: 嵌入式 MongoDB 为测试提供了极佳的隔离性,确保每个测试都能在一个干净的环境中运行,避免了测试之间的相互影响。

通过以上调整,您应该能够在 Spring Boot 3.0.0 项目中成功地集成并使用嵌入式 MongoDB 进行高效、可靠的集成测试。

终于介绍完啦!小伙伴们,这篇关于《SpringBoot3.0嵌入式MongoDB集成测试方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>