python - 如何为 python 单元测试模拟 mongodb?

标签 python mongodb unit-testing mocking pymongo

我正在使用 Python 2.7 的 mock 模块来模拟我的其他函数并使用

unittest 用于编写单元测试。

我想知道模拟 MongoDB 是否不同于使用模拟功能(mock.patch 一个被调用的函数?)或者我需要为此目的使用另一个不同的包?

我不认为我想要运行测试 mongodb 实例。我想要的只是一些速度数据并能够调用 pymongo 功能。我只是有点迷失在想是否有一种方法可以为模块编写模拟(如 pymongo),或者任何可以通过 mock 模块实现的东西。

如果您能提供相关示例或教程,我们将不胜感激。

测试代码

from pymongo import MongoClient

monog_url = 'mongodb://localhost:27017'
client = MongoClient(monog_url)
db = client.db

class Dao(object):
   def __init__(self):
      pass

   def save(self, user):
      db_doc = {
        'name': user.name,
        'email': user.email
      }
      db.users.save(db_doc)

   def getbyname(self, user):
      db_doc = {
        'name': user.name,
      }
      return db.users.find(db_doc)

为了测试这个,我真的不想测试 mongodb 启动并运行!而且,我想我不想模拟 db.userssave 和 db.users.find,因为我希望实际上能够检索我保存的数据并确保它在数据库中。我想我需要为我内存中的每个模型创建一些 fixture 并使用它们。只是我需要一个外部工具吗?

我想保留一些这样的假数据,只是不知道如何正确处理。

users = { 
    {'name' : 'Kelly', 'email' : 'kelly@gmail.com'},
    {'name': 'Sam', 'email': 'sam@gmail.com'}
}

最佳答案

我推荐使用 mongomock 来模拟 mongodb。它基本上是一个内存中的 mongodb,带有 pymongo 接口(interface),专门为此目的而制作。

https://github.com/mongomock/mongomock

关于python - 如何为 python 单元测试模拟 mongodb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239241/

相关文章:

python - 为什么这段代码没有成功运行?

python - 如何找到多列的最大连续数?

python - y 轴上 matplotlib 中的百分比符号

javascript - MongoDB:聚合函数中的字符串字段的 parseFloat ($avg)

unit-testing - 有什么工具可以记录单元测试的Java对象吗?

python - 在 scikit-learn 中的数据集上绘制决策树

node.js - 使用 Passport.js LocalStrategy 进行另一项字段验证

node.js - 类型错误 : Cannot read property 'drop' of undefined

java - 使用事务测试 EJB 而不将其部署到容器中?

c# - Assert.AreNotEqual 和 Assert.AreNotSame 之间有什么区别?