Тестирование всех моделей django с помощью одного теста

Я начал писать тесты для своего приложения django, и мне стало интересно, есть ли способ протестировать некоторые функции, одинаковые в более чем одной модели, одновременно. Например, если я хочу протестировать метод __unicode__(), который используется во всех моих классах, и вместо того, чтобы писать тест для каждой отдельной модели, можно ли будет оптимизировать его и протестировать один раз для всех моделей?


person Code4fun    schedule 11.04.2017    source источник
comment
docs.pytest.org/en/latest/parametrize.html   -  person allcaps    schedule 11.04.2017


Ответы (2)


Я думаю, что это возможно, но я бы предпочел делать это в отдельных тестах unit_tests в отдельных тестовых примерах TestModels. Я думаю, что больше тестов — лучший подход, потому что если вы измените метод в своем приложении в будущем, вам нужно будет изменить только один тест. Если у вас есть только один тест для всех моделей, вам потребуется:

  1. исправить групповой тест
  2. написать еще один тест для обработки одной модели

Что, на мой взгляд, пустая трата времени.

Первая идея, которая приходит мне в голову, заключается в том, что вы импортируете все свои модели и упаковываете их в список, а затем можете просто использовать цикл for для выполнения методов. Просто сделайте что-нибудь вроде этого

from app.models import Model1, Model2, Model3

models_list = [Model1,Model2,Model3]

for mod in models_list:
    mod.method()
person Dawid Dave Kosiński    schedule 11.04.2017

Согласно этому ответу, вы можете сделать что-то вроде:

from django.db.models import get_app, get_models

# In your test method:
app = get_app('my_application_name')
for model in get_models(app): 
    assert unicode(model(something='something')) == u'expected unicode'
person alfonso.kim    schedule 11.04.2017
comment
к сожалению, это решение устарело. Я пытался использовать from django.apps import apps и for model in apps.get_model():, но мне не повезло - person Code4fun; 19.04.2017