2011-05-02 48 views
28

我必须为使用MongoDB存储的Java代码开发一些Junit测试。有没有允许我初始化模拟内存MongoDB服务器的框架/库?配置并使用mongodb模型服务器进行单元测试

(这个想法是只测试代码本身,也就是说,在任何独立运行的机器上,如果安装了MongoDB,&正在运行)。

在此先感谢!

+0

你不只是使用本地的MongoDB安装?它非常轻巧... 或..一个托管的芒果?例如mongohq.com? – Alex 2011-05-03 10:52:09

+4

这就是我现在正在做的(当地蒙戈)。问题在于它将在持续集成服务器中进行部署和测试,这意味着测试将定期在该机器上进行测试。 在这台机器上部署MongoDB服务器不是一个选项(此外,如果单元测试使用托管服务或数据库服务器等外部资源,它将不再是确定性的,因为这些服务不受控制)。 – Ruben 2011-05-03 14:29:46

+3

对于那些建议连接到现有Mongo的人,我相信Ruben正在寻求类似于H2数据库的使用方法。它可以“嵌入”到你的单元测试中。 – Damo 2012-03-08 02:45:38

回答

1

不是真的,你必须在应用程序层自己做那样的事情。如果你使用Morphia,你可以使用任何你喜欢的服务层的模拟框架(因为对象只是POJO),但是在db/driver层没有任何东西可以帮助你。

许多人只是使用本地开发。带有一组测试数据的mongodb实例,因为它非常快。我知道为每个测试加载测试数据的人,例如用假/测试数据复制数据库。

0

作为测试夹具设置的一部分,删除数据库并使用任何默认测试数据填充数据库。

3

我们实际上正在研究这样一个测试系统,这是非常可行的。在我们的方法我们的测试框架,扩展了标准的测试用例类(JUnit的在我们的例子,但TestNG的好像更强大),设置和使用以下步骤眼泪就下来了各种数据库依赖条件与每个测试:

测试套件安装

1)启动的mongod过程(我们使用的ProcessBuilder,存储进程实例)

测试设定:

2)运行蒙戈与测试特定js文件,以产生初始数据状态

测试

3)运行测试

测试拆卸

4)删除数据库

测试套件拆卸

5)停止的mongod处理(process.destroy())

由于启动和停止mongod是唯一耗时的事情,我强烈建议尽可能少做这件事。最好一次用于整个测试套件。我们的东西还没有完成,但早期的结果是积极的。我不认为有很多替代品可供选择。在撰写本文时,没有mongo模拟库,mongod没有内存/嵌入模式。

+0

这是如何跨平台? – wulfgarpro 2011-08-05 02:22:53

+0

除了开始该过程之外,上面没有平台特定的元素。测试机器通常没有多个操作系统。 – 2011-08-05 11:41:52

+0

hm,我们的团队使用win和* nix;我们将负责项目并在我们的个人机器上运行测试..您是否建议我们将mongo二进制文件打包到两个平台上? – wulfgarpro 2011-08-05 12:38:46

3

我在Java中编写了一个MongoDB存根实现:mongo-java-server(请参阅this answer)。

+0

好东西。显然它有一些限制,但是现在我可以用干净的数据库运行我的Selenium测试。谢谢。 – 2016-05-07 16:08:38

相关问题