如何在 JUnit 测试期间在 Spring 中使用不同的 MongoDB 数据库

How to use different MongoDB databases in Spring during JUnit tests

我正在使用 JUnit5 为 Spring Boot (2.0) 编写测试,我需要使用不同的数据库来进行 运行 单元测试。我怎么知道我的 Spring 应用程序是否由 JUnit 启动?
我计划在 AbstractMongoConfiguration 中使用它在 mongoClient() 方法上获得不同的 MongoClient 实例。
或者有更好的方法吗?

您可以拥有配置文件特定的 mongo 属性,例如用于测试、开发、生产等的 (URI)

样本测试class(针对 Junit5 更新)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles(profiles = {"test"})
public class SampleTest {
    @Autowired
    MongoTemplate mongoTemplate;


    //.....  Some Test methods goes here .... 

}

在上述情况下,我们提供了一个名为 test 的配置文件作为 ActiveProfiles。因此,默认情况下,来自 class 路径(资源)的两个属性将被选中,一个是 application.properties,另一个是 application-test.properties。我们要做的是,我们将所有与数据库相关的配置提取到 application.properties.

的对应配置文件中

我的资源文件夹将包含

\资源

-- application.properties

-- application-dev.properties

-- application-prod.properties

-- application-qa.properties

-- application-test.properties

applicaion-test.properties

spring.data.mongodb.uri=mongodb://<test db ip config goes here>/test_app_db

application-dev.properties

spring.data.mongodb.uri=mongodb://<dev ip>/app_db

等等,不同的 mongo bean 可以通过使用配置文件特定的配置来控制。

希望对您有所帮助。