Mah*_*aly 11 python unit-testing mocking mongodb pymongo
我正在使用mock适用于Python 2.7的模块来模拟其他功能并使用
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)
Run Code Online (Sandbox Code Playgroud)
为了测试这一点,我真的不想要测试mongodb并运行它!而且,我想我不想模拟db.userssave和db.users.find,因为我希望实际上能够检索我保存的数据并确保它在db中。我认为我需要为记忆中的每个模型创建一些灯具并使用它们。我是否需要外部工具来做到这一点?
我正在考虑保留一些虚假数据,只是不知道如何正确处理它。
users = {
{'name' : 'Kelly', 'email' : 'kelly@gmail.com'},
{'name': 'Sam', 'email': 'sam@gmail.com'}
}
Run Code Online (Sandbox Code Playgroud)
mir*_*tle 10
如果您只是做一些简单的事情,并且实际上不需要按字段检索,您也可以这样做。
@mock.patch("pymongo.collection.Collection.find")
def test_name(self, mock_find):
mock_find.return_value = {'name' : 'Kelly', 'email' : 'kelly@gmail.com'}
# rest of test
Run Code Online (Sandbox Code Playgroud)
我建议使用mongomock模拟mongodb。它基本上是带有pymongo接口的内存mongodb,是专门为此目的而制作的。
https://github.com/mongomock/mongomock
您当然可以模拟 PyMongo,但我建议模拟 MongoDB 服务器本身。我为 MongoDB 编写了一个可以完全控制的纯 Python 模拟器,无论您选择什么,它都会响应 MongoDB Wire Protocol 消息:
http://mockupdb.readthedocs.io/tutorial.html
以下是在 Python 应用程序中使用 MockupDB 的示例:
https://emptysqua.re/blog/test-mongodb-failures-mockupdb/
它需要对 MongoDB 有线协议有深入的了解,但无论如何,这是一项有用的技能。
| 归档时间: |
|
| 查看次数: |
7923 次 |
| 最近记录: |