2016-12-05 97 views
0

我需要mongoDB在运行JUnit测试时自动运行,然后在测试完成时停止运行。我试过使用maven mongoDB插件,但mongoDB似乎不运行。任何帮助?运行JUnit测试时运行MongoDB的问题

+2

您的单元测试应该首先嘲笑与真实数据库的通信(除非它们只是使用JUnit框架完成的应用程序测试)。 –

+0

@TimothyTruckle如果你正在谈论嘲弄孟戈司机,那么请不要这样做。这里是一篇关于为什么你不应该这样做的文章https://jaxenter.com/testing-the-database-layer-119366.html – tddmonkey

+0

当您测试数据库*中的行为*时,文章参数是有效的。当你(* unit- *)在数据库之外测试业务逻辑时,你真的应该嘲笑数据库访问。 –

回答

0

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

它基本上开始在目前的JVM的嵌入式蒙戈分贝。

您可以使用@BeforeAll/@Before子句启动它,然后停止并清除所有内容。

春季启动提供一个内置的自动配置,所以你只需要添加一个依赖于embed.mongo:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-mongo-embedded

否则,您可以使用该文档在Github上建立自己的嵌入式蒙戈分贝。

0

如果你只是单元测试,你应该尝试模拟数据库集成。但是,我不得不一次处理这个问题,需要测试Mongo/Java项目之间的集成。 Mongo插件也不适合我。下面是我尝试过的两种选择,也许他们会帮助:选项1(w/Docker):在我的构建和部署堆栈(Maven,Jenkins,Docker)中,最简单的做法是作为预构建步骤启动Mongo容器,使用集成环境配置设置运行构建,并关闭容器作为构建后步骤。此外,如果您需要测试特定数据,则可以构建具有该数据的容器。选项2(仅Maven/Mongo):在Maven的pre-integration-tests生命周期阶段,使用Maven exec plugin致电操作系统启动Mongo。运行测试,并确保在integration-test阶段运行需要Mongo的测试。然后在post-integration-test阶段关闭Mongo。根据您的测试,如果它们改变Mongo实例的状态,这可能会非常棘手。如果这是一个问题,您可以编写一些脚本来重新初始化/销毁Mongo,并在上述阶段调用这些脚本。

Maven lifecycle reference