首先,请确保您已将以下Spring Boot父项目添加到您的项目中:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!
</parent>
自从我们添加了Spring Boot Parent,我们可以添加所需的依赖项而无需指定它们的版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring-boot-starter-data-mongodb 将启用 Spring 对 MongoDB 的支持。
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
de.flapdoodle.embed.mongo 提供了嵌入式 MongoDB,用于集成测试。
添加 de.flapdoodle.embed.mongo 依赖后,Spring Boot 在运行测试时会自动尝试下载和启动嵌入式 MongoDB。以下代码片段展示了您如何手动配置嵌入式 MongoDB 实例。
class EmbeddedMongoDbIntegrationTest {
private MongodExecutable mongodExecutable;
private MongoTemplate mongoTemplate;
@After
void clean() {
mongodExecutable.stop();
}
@Before
void setup() throws Exception {
String ip = "localhost";
int port = 27017;
IMongodConfig mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION)
.net(new Net(ip, port, Network.localhostIsIPv6()))
.build();
MongodStarter starter = MongodStarter.getDefaultInstance();
mongodExecutable = starter.prepare(mongodConfig);
mongodExecutable.start();
mongoTemplate = new MongoTemplate(new MongoClient(ip, port), "test");
}
@Test
void test() throws Exception {
DBObject objectToSave = BasicDBObjectBuilder.start()
.add("key", "value")
.get();
mongoTemplate.save(objectToSave, "collection");
assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key")
.containsOnly("value");
}
}
请注意,我们可以快速创建MongoTemplate bean,并配置它以使用我们手动配置的嵌入式数据库,并在Spring容器中注册它,这样您的mongo repository也将开始利用这个mongoTemplate。
@SpringBootTest
和将de.flapdoodle.embed:de.flapdoodle.embed.mongo
作为test依赖项,即可创建集成测试。参见https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-mongo-embedded。 - andy