2015-04-26 4 views
1

Недавно я начал работать с Mongoid с помощью MongoLab. На самом деле у меня нет локального экземпляра MongoDB (и в действительности он не нужен). Тем не менее, я хочу, чтобы модуль тестировал некоторое создание документа.mongoid unit test без запуска mongodb

Есть ли эквивалент SQLite для Mongo? Или некоторый способ запоминания в памяти для написания тестов для бизнес-логики вокруг создания документа Mongoid?

То, что я хотел бы сделать, это вызвать основной метод класса, который создает монгоидные документы, а затем проанализировать структуру/данные документа без его сохранения. Но Монгоид, похоже, не допускает этого, если я не пропущу что-то.

Каков наилучший способ проверить структуру/валидации/отношения/etc. из монгольских документов без работает MongoDB или сохраняется?

+0

Какой «главный метод» вы здесь говорите? –

+0

Извините, если я не понял. «Основным методом» я просто имел в виду основной публичный интерфейс/метод для класса, который создает документ. У меня есть класс Manager, который создает Mongoid документы, и я хочу, чтобы модуль тестировал класс менеджера, проверяя правильность документов Mongoid ... но без фактического сохранения их в любом MongoDB. –

+0

Как называется метод? –

ответ

0

Оказалось, что моя проблема была «find_or_initialize_by». Я должен был это осознать. Это, по сути, требовало наличия фактической базы данных для поиска.

Что я закончил делать для своих тестов, чтобы они могли быстро работать и не иметь внешней зависимости от БД, заключается в том, чтобы обернуть метод find_or_initialize_by в методах, а затем я могу издеваться над этими методами и управлять возвратами.

Так что для нового объекта я могу издеваться над этим и вернуть новый документ Mongoid Для существующего объекта я могу создать новый документ Mongoid, заполненный данными, а затем издеваться над этим методом и вернуть его.

Это позволяет мне моделировать в моих тестах сценарии, в которых я создаю новые документы и сценарии, где я нахожу и обновляю существующие документы.

Мне также пришлось заглушить метод сохранения, что означает, что я должен обрабатывать проверки отдельно.

Кажется, что много работы, но ценность здесь в том, что я могу выполнять свои тесты очень быстро, и у меня нет зависимости от БД ..., которые у меня были до этого. Это особенно приятно, так как у меня даже нет локальной базы данных ... Я просто использую Mongolab.com, и я определенно не хочу, чтобы мои модульные тесты выполняли удаленные вызовы БД.

Я надеюсь, что это поможет кому-то еще. Это было довольно тяжелое испытание, чтобы понять все это и заставить его работать, но теперь у меня есть хорошие, быстрые, независимые модульные тесты!