Estoy usando el módulo mock para Python 2.7 para burlarme de mis otras funciones y usando
unittest para escribir pruebas unitarias.
Me pregunto si burlarse de MongoDB es diferente a usar la funcionalidad simulada ( mock.patch una función que se está llamando?) ¿O necesito usar otro paquete diferente para ese propósito?
No creo que quiera ejecutar una instancia de prueba de mongodb. Todo lo que quiero es algunos datos de tempo y poder llamar a la funcionalidad de pymongo . Estoy un poco perdido pensando si hay alguna manera de escribir un simulacro para un módulo (como pymongo ), o cualquier cosa que se pueda lograr con un módulo mock .
Así que agradezco si pudiera proporcionar un ejemplo o tutorial sobre esto.
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)Para probar esto, ¡realmente no quiero un mongodb de prueba en funcionamiento! Pero también, creo que no quiero burlarme de db.userssave y db.users.find porque quiero poder recuperar los datos que guardé y asegurarme de que estén en la base de datos. Creo que necesito crear algunos accesorios según los modelos que tengo en la memoria y trabajar con ellos. ¿Necesito una herramienta externa para hacerlo?
Estoy pensando en mantener algunos datos falsos como este, pero no sé cómo manejarlos adecuadamente.
users = { {'name' : 'Kelly', 'email' : 'kelly@gmail.com'}, {'name': 'Sam', 'email': 'sam@gmail.com'} }Recomiendo usar mongomock para burlarse de mongodb. Es básicamente un mongodb en memoria con interfaz pymongo y está hecho específicamente para este propósito.
También puede hacer esto si solo está haciendo algo simple y realmente no necesita recuperar por campo.
@mock.patch("pymongo.collection.Collection.find") def test_name(self, mock_find): mock_find.return_value = {'name' : 'Kelly', 'email' : 'kelly@gmail.com'} # rest of testCiertamente puede burlarse de PyMongo, pero recomiendo burlarse del propio servidor MongoDB. He escrito un emulador de Python puro para MongoDB que puede controlar por completo, que responde a los mensajes del Protocolo de cable de MongoDB como usted elija:
http://mockupdb.readthedocs.io/tutorial.html
Aquí hay un ejemplo del uso de MockupDB con una aplicación de Python:
https://emptysqua.re/blog/test-mongodb-failures-mockupdb/
Requiere un conocimiento profundo del protocolo de conexión de MongoDB, pero de todos modos es una habilidad útil para adquirir.