Тестирование ORM для RethinkDB

Я близок к завершению ORM для RethinkDB на Python, но застрял на написании тестов. Особенно при операциях save(), get() и delete(). Каков рекомендуемый способ проверить, выполняет ли мой ORM то, что он должен делать при сохранении, удалении или получении документа?

Прямо сейчас для каждого теста в моем наборе я создаю базу данных, заполняю ее всеми таблицами, необходимыми для тестовых моделей (это занимает много времени, почти 5 секунд на тест!), запускаю операцию на моей модели (например: save() ), а затем вручную запустите запрос к базе данных (используя драйвер RethinkDB Python), чтобы увидеть, все ли было обновлено в базе данных.

Я чувствую, что это не совсем правильно; возможно, есть другой способ написать эти тесты, или, может быть, я могу разработать тесты, даже не выполняя столько запросов к базе данных. Любая идея о том, как я могу улучшить это, или предложение о том, как это должно быть на самом деле сделано?


person linkyndy    schedule 18.09.2014    source источник


Ответы (1)


Вы можете создать все свои базы данных/таблицы только один раз для всего теста.

Вы также можете использовать каталог необработанных данных: - Запустите RethinkDB - Создайте все свои базы данных/таблицы - Зафиксируйте это.

Перед каждым тестом скопируйте каталог данных, запустите RethinkDB на копии, а затем, когда тест будет завершен, удалите скопированный каталог данных.

person neumino    schedule 18.09.2014
comment
Каждый набор тестов будет иметь свои собственные модели, следовательно, свои собственные таблицы, поэтому я не могу и не должен иметь одну и ту же базу данных/таблицы для всех своих тестов. Кроме того, я запущу RethinkDB, а затем прогоню все тесты, я не думаю, что будет хорошей ставкой запускать и останавливать RethinkDB для каждого теста — потеря производительности, вероятно, будет такой же в моем текущем случае. - person linkyndy; 19.09.2014
comment
Одним из способов выиграть немного времени было бы просто очистить таблицы вместо их удаления/воссоздания. Я также поддерживаю ORM, и я также просто удаляю/создаю таблицы, и я должен признать, что это немного медленно. - person neumino; 19.09.2014
comment
Я знаю, и вы отлично с этим справились! :) Хорошо, тогда приятно знать, что у коллег-программистов такой же подход... А каково ваше мнение по другому моему вопросу, касающемуся метода тестирования? Как вы проверяете, делают ли ваши модельные операции то, что от них ожидается? - person linkyndy; 19.09.2014
comment
Я делаю то же самое для проверки сохранения/удаления/обновления/и т.д. Я в основном запускаю команду, а затем запрашиваю базу данных, чтобы убедиться, что документ был правильно сохранен/удален/обновлен. Я думаю, что вы не можете добиться большего успеха, поскольку вы можете не отправить соответствующий запрос (при выполнении обновления), но все же получить ожидаемый результат (например, replaced: 1) - person neumino; 19.09.2014
comment
Я понимаю. Думал, что будет менее затратный по времени подход. Как я и ожидал, модульные тесты должны быть быстрыми и не должны зависеть от внешних сторон, таких как базы данных. - person linkyndy; 19.09.2014
comment
Единственный способ - смоделировать базу данных Python, но это довольно много работы:/ - person neumino; 19.09.2014