Я пытаюсь выполнить модульное тестирование новой функции, которую я написал в не очень большом проекте Django (с некоторыми устаревшими функциями, которые я не могу изменить в настоящее время).
Схема базы данных стала очень большой иочень переплетены.Каждый тест, который мы в конечном итоге пишем, должен пройти очень долгий процесс настройки базы данных со многими внешними ключами, которые не нужны большинству модульных тестов.Но инфраструктура Django заставит нас настроить их, поскольку одна модель имеет внешний ключ к другому, который затем будет иметь один к другому и т. Д.
Я пытался вообще не использовать базу данных, чтобыЗапустите мои модульные тесты, имитируя большинство взаимодействий с базой данных (например: objects.filter
, objects.get
, save
и т. д.).
Это работает, но я не могу получить данные подтверждения о различных атрибутах - более конкретнопример:
@mock.patch.object(MyObject, 'save')
def testing_something_that_saves(self, mock_save_function):
# a bit of setup stuff
mock_save_function.return_value = True
call_test_function()
self.assertEquals(len(mock_save_function.mock_calls), 1)
Но как в этом случае я могу - или я проверю различные MyObject
, которые будут сохранены?Вызов функции save()
не принимает параметры - но я хотел бы проверить, что сохраняемый объект имеет правильные значения.
Возможно, мой подход неверен, но я не могу быть первым, кто попытаетсятестируйте очень большое приложение Django, не желая загружать огромное количество данных для каждого теста, особенно тесты, которые нуждаются в очень небольшом количестве упомянутых данных.
Stack: