【问题标题】:mongoid unit test without running mongodb不运行 mongodb 的 mongoid 单元测试
【发布时间】:2015-04-26 23:40:10
【问题描述】:

我最近开始使用 MongoLab 与 Mongoid 合作。我实际上并没有运行本地 MongoDB 实例(也不需要它)。但是,我想对一些文档创建进行单元测试。

Mongo 是否有等效的 SQLite?或者一些内存中的方式来为围绕 Mongoid 文档创建的业务逻辑编写测试?

我希望能够调用创建 Mongoid 文档的类的主要方法,然后在不持久化的情况下对文档结构/数据进行自省。但是 Mongoid 似乎不允许这样做,除非我遗漏了什么。

测试结构/验证/关系/等的最佳方法是什么?的 Mongoid 文档 没有运行 MongoDB 或持久化它们?

【问题讨论】:

  • 这里说的“主要方法”是什么?
  • 对不起,如果我不清楚。 “主要方法”是指创建文档的类的主要公共接口/方法。我有一个创建 Mongoid 文档的管理器类,我想对管理器类进行单元测试,验证 Mongoid 文档是否正确......但不必将它们实际保存到任何 MongoDB。
  • 方法叫什么?
  • Ryan,与方法名无关。我只是想问是否有办法在内存中创建 Mongoid 文档单独进行测试。这样,我可以在单元测试中创建它们,而不需要任何数据库访问。这就是我在这里所追求的。
  • 如果你打电话给create,它会自动保持。如果您调用new,它将创建一个内存对象。所以是的,你调用什么方法确实很重要。

标签: ruby mongodb unit-testing testing mongoid


【解决方案1】:

原来我的问题是在做“find_or_initialize_by”。我应该意识到这一点。实际上,这要求存在一个实际的数据库来进行查找。

我最终为我的测试做了什么,以便它们可以快速运行并且没有外部数据库依赖项,是将“find_or_initialize_by”包装在方法中,然后我可以模拟这些方法并控制返回。

所以对于一个新对象,我可以模拟它并返回一个新的 Mongoid 文档 对于现有对象,我可以构建一个填充了数据的新 Mongoid 文档,然后模拟该方法并将其返回。

这允许我在测试中模拟创建新文档的场景以及查找和更新现有文档的场景。

我还必须存根保存方法,这意味着我必须单独处理验证。

这似乎需要做很多工作,但这里的价值是我可以非常快速地运行我的测试,而且我没有数据库依赖......我以前有。这特别好,因为我什至没有本地数据库...我只是在使用 Mongolab.com,而且我绝对不希望我的单元测试进行远程数据库调用。

我希望这对其他人有所帮助。把这一切弄清楚并让它工作是一件很痛苦的事,但现在我有了很好、快速、无依赖的单元测试!

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多