用一个测试用例测试所有 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 appsfor model in apps.get_model(): 但是我运气不好

以上是关于用一个测试用例测试所有 django 模型的主要内容,如果未能解决你的问题,请参考以下文章

使 Django 测试用例数据库对 Celery 可见

软件测试的分类&测试用例的设计&如何编写测试用例

Django 1.4 表单向导测试用例

Django单元测试简单示例

使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢

当您的应用程序具有测试目录时,在 Django 中运行特定的测试用例