用一个测试用例测试所有 django 模型
Posted
技术标签:
【中文标题】用一个测试用例测试所有 django 模型【英文标题】:Testing all django models with one test case 【发布时间】:2017-09-06 20:40:51 【问题描述】:我开始为我的 django 应用程序编写测试,我想知道是否有一种方法可以同时测试多个模型中相同的一些功能。例如,如果我想测试我所有课程中出现的__unicode__()
方法,而不是为每个模型编写测试,是否可以对其进行优化并为所有模型测试一次?
【问题讨论】:
docs.pytest.org/en/latest/parametrize.html 【参考方案1】:我认为这是可能的,但我更愿意在单独的 TestModels 测试用例中单独的 unit_tests 中执行此操作。我认为更多的测试是一种更好的方法,因为如果您将来更改应用程序中的方法,您将只需要更改一个测试。如果您对所有模型只有一项测试,那么您将需要:
-
修复组测试
编写另一个测试来处理一个模型
在我看来这是浪费时间。
我想到的第一个想法是导入所有模型并将它们打包到一个列表中,然后您可以使用 for 循环来执行这些方法。就做这样的事情
from app.models import Model1, Model2, Model3
models_list = [Model1,Model2,Model3]
for mod in models_list:
mod.method()
【讨论】:
【参考方案2】:根据this answer,您可以执行以下操作:
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'
【讨论】:
遗憾的是,此解决方案已被贬低。我尝试使用from django.apps import apps
和 for model in apps.get_model():
但是我运气不好以上是关于用一个测试用例测试所有 django 模型的主要内容,如果未能解决你的问题,请参考以下文章