Я начал писать тесты для своего приложения django, и мне стало интересно, есть ли способ протестировать некоторые функции, одинаковые в более чем одной модели, одновременно. Например, если я хочу протестировать метод __unicode__()
, который используется во всех моих классах, и вместо того, чтобы писать тест для каждой отдельной модели, можно ли будет оптимизировать его и протестировать один раз для всех моделей?
Тестирование всех моделей django с помощью одного теста
comment
docs.pytest.org/en/latest/parametrize.html
- person allcaps   schedule 11.04.2017
Ответы (2)
Я думаю, что это возможно, но я бы предпочел делать это в отдельных тестах unit_tests в отдельных тестовых примерах TestModels. Я думаю, что больше тестов — лучший подход, потому что если вы измените метод в своем приложении в будущем, вам нужно будет изменить только один тест. Если у вас есть только один тест для всех моделей, вам потребуется:
- исправить групповой тест
- написать еще один тест для обработки одной модели
Что, на мой взгляд, пустая трата времени.
Первая идея, которая приходит мне в голову, заключается в том, что вы импортируете все свои модели и упаковываете их в список, а затем можете просто использовать цикл 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
к сожалению, это решение устарело. Я пытался использовать
from django.apps import apps
и for model in apps.get_model():
, но мне не повезло
- person Code4fun; 19.04.2017