我的问题是这个问题的一个变体。
由于我的javawebapp项目需要大量的读取过滤器/查询以及与gridfs等工具的接口,因此我很难想出一种明智的方法来按照上述解决方案的建议使用mongodb。
因此,我正在考虑在集成测试的同时运行mongodb的嵌入式示例。我希望它自动启动(无论是对于每个测试还是整个套件),为每个测试刷新数据库,并在最后关闭。这些测试可能在开发机器和ci服务器上运行,因此我的解决方案也需要可移植性。
任何对mongodb有更多了解的人能帮助我了解这种方法的可行性吗,或者建议一些可以帮助我入门的阅读材料?
我也愿意接受别人对我如何解决这个问题的建议。。。
10条答案
按热度按时间mefy6pfw1#
以下是@rozky提供的已接受答案的更新版本(2019年)(mongo和嵌入式mongodb库中都发生了很多变化)。
lyr7nygr2#
我找到了嵌入式mongodb库,它看起来很有前途,可以满足您的要求。
目前支持mongodb版本:
1.6.5
至3.1.6
,前提是二进制文件仍然可以从配置的镜像获得。下面是一个简短的使用示例,我刚刚尝试过,效果非常好:
iyfamqjs3#
有foursquare产品fongo。fongo是mongo的内存java实现。它拦截对标准mongojava驱动程序的查找、更新、插入、删除和其他方法的调用。主要用途是轻量级单元测试,您不想让mongo进程加速。
sg24os4d4#
如果您使用的是maven,您可能会对我创建的一个插件感兴趣,该插件封装了flapdoodle.de“embedded mongo”api:
embedmongo maven插件
它提供了一个
start
您可以用来启动任何版本的mongodb的目标(例如pre-integration-test
),和stop
停止mongodb的目标(例如post-integration-test
).与其他插件相比,使用此插件的真正好处是不需要事先安装mongodb。mongodb二进制文件下载并存储在
~/.embedmongo
用于将来的构建。34gzjxbg5#
如果您使用的是sbt和specs2,那么我为embedmongo编写了相同的 Package 器
https://github.com/athieriot/specs2-embedmongo
okxuctiv6#
使用SpringBoot1.3,您可以使用EmbeddedMongoutoConfiguration
pom.xml文件
蒙哥哥菲格
sxpgvts37#
从3.2.6版开始,您可以在内存中运行mongodb。从现场:
从mongodb企业版3.2.6开始,内存中的存储引擎是64位版本中的通用可用性(ga)的一部分。除了一些元数据和诊断数据外,内存存储引擎不维护任何磁盘数据,包括配置数据、索引、用户凭据等。
qoefvg9y8#
不仅针对单元测试,还解释了如何将inmemory mongodb与restapi结合使用。
maven依赖关系:
=============================================================================
应用程序属性
=============================================================================
用户存储库.java
公共接口userrepository扩展了mongorepository{
}
供参考和所有java代码使用以下链接:(分步说明)
https://www.youtube.com/watch?v=2tq2q7ezhsa&t=7s
zpjtge229#
执行时性能更好
mongod
与storageEngine='ephemeralForTest'
```new MongodConfigBuilder()
.version(Version.Main.PRODUCTION)
.cmdOptions(new MongoCmdOptionsBuilder()
.useStorageEngine("ephemeralForTest")
.build())
.net(new Net("localhost", port, Network.localhostIsIPv6()))
.build()
v8wbuo2f10#
在生产中,您将使用一个真正的数据库。
如果您希望您的测试反映产品在生产中的行为,请使用mongo的真实示例。
假实现的行为可能与真实实现的行为不完全相同。在测试时,你应该争取正确性。执行速度位居第二。