Используйте mock MongoDB-сервер для unit test
Мне нужно реализовать nosetests для кода Python с помощью магазина MongoDB. Есть ли какая-либо библиотека python, которая позволяет мне инициализировать mock-сервер MongoDB в памяти?
Я использую непрерывную интеграцию. Итак, я хочу, чтобы мои тесты не зависели от любого сервера MongoDB.
Есть ли способ обмануть сервер mongoDM в памяти для проверки кода независимо от подключения к серверу Mongo?
Спасибо заранее!
Ответы
Ответ 1
Вы можете попробовать: https://github.com/vmalloc/mongomock, целью которого является небольшая библиотека для издевательских объектов коллекции pymongo для целей тестирования.
Тем не менее, я не уверен, что стоимость просто запуска mongodb была бы запретительной по сравнению с тем, чтобы какая-то насмешливая библиотека была полной.
Ответ 2
Я не знаю о Python, но у меня была аналогичная проблема с С#. Я решил просто запустить настоящий экземпляр Mongo на моей рабочей станции, указав на пустой каталог. Это не очень хорошо, потому что код не изолирован, но его быстро и просто.
Только уровень доступа к данным фактически вызывает Mongo во время теста. Остальные могут полагаться на mocks уровня доступа к данным. Я не чувствовал, что фальсификация Монго стоила усилий, когда я действительно хочу проверить, что взаимодействие с Монго все равно.
Ответ 3
Вы можете использовать Ming, в котором есть замена связи pongongo в памяти mongo db.
import ming
mg = ming.create_datastore('mim://')
mg.conn # is the connection
mg.db # is a db with no name
mg.conn.somedb.somecol
# >> mim.Collection(mim.Database(somedb), somecol)
col = mg.conn.somedb.somecol
col.insert({'a': 1})
# >> ObjectId('5216ac3fe0323a1218f4e9aa')
col.find().count()
# >> 1
Ответ 4
Я также использую pymongo, и MockupDB очень хорошо работает для моих целей (интеграционные тесты).
Использовать его так же просто, как:
from mockupdb import *
server = MockupDB()
port = server.run()
from pymongo import MongoClient
client = MongoClient(server.uri)
import module_i_want_to_patch
module_i_want_to_patch.client = client
Вы можете проверить официальный учебник для MockupDB здесь