当 JUnit 测试为 运行 时 运行 MongoDB 的问题

Problems with running MongoDB when JUnit tests are ran

我需要在我的 JUnit 测试 运行 时自动 mongoDB 到 运行,然后在测试完成时停止。我试过使用 Maven mongoDB 插件,但 mongoDB 似乎没有 运行。有什么帮助吗?

如果你只是单元测试,你应该尝试模拟数据库集成。但是,我不得不一次性处理这个问题,需要测试 Mongo/Java 项目之间的集成。 Mongo 插件也不适合我。以下是我尝试过的两个选项,也许它们会有所帮助:

选项 1(带 Docker):在我的构建和部署堆栈(Maven、Jenkins、Docker)中,对我来说最简单的事情是启动一个 Mongo 容器作为预构建步骤,运行 使用集成环境配置设置进行构建,并作为 post 构建步骤关闭容器。此外,如果您有需要测试的特定数据,您可以构建一个包含该数据的容器。

选项2(只是Maven/Mongo):在Maven的pre-integration-tests生命周期阶段,使用Maven exec plugin调用操作系统启动Mongo。 运行 你的测试,并确保在 integration-test 阶段需要 Mongo 的测试是 运行。然后在post-integration-test阶段关闭Mongo向下。根据您的测试,如果它们改变了您的 Mongo 实例的状态,这可能会很棘手。如果这是一个问题,您可以将一些脚本写入 reinitialize/destroy Mongo,并在上述阶段调用这些脚本。

Maven lifecycle reference

您可以为此使用 embed.mongo:https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo

它基本上在当前 jvm 中启动了一个嵌入式 mongo 数据库。

您可以使用 @BeforeAll / @Before 子句启动它,然后停止它,一切都会被清理。

Spring Boot 内置了自动配置,所以你只需要添加对 embed.mongo 的依赖:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-mongo-embedded

否则,您可以使用 Github 上的文档来设置您自己的嵌入式 mongo 数据库。