Используйте 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 здесь