【发布时间】:2010-02-24 19:54:17
【问题描述】:
现在,如果我想从我的所有应用中运行测试,我会这样做:
python manage.py test app1 app2 app3
如果我跑:
python manage.py test
测试INSTALLED_APPS 中的所有应用程序,包括 django 应用程序。是否有一个简单的命令来运行我创建的所有应用程序的测试?
【问题讨论】:
标签: django
现在,如果我想从我的所有应用中运行测试,我会这样做:
python manage.py test app1 app2 app3
如果我跑:
python manage.py test
测试INSTALLED_APPS 中的所有应用程序,包括 django 应用程序。是否有一个简单的命令来运行我创建的所有应用程序的测试?
【问题讨论】:
标签: django
遗憾的是没有这样的命令。 Django 无法分辨哪些应用是“你的”,哪些是别人的。
我的建议是编写一个新的管理命令,称之为 mytest。然后创建一个新设置 MY_INSTALLED_APPS。 mytest 命令只会对 MY_INSTALLED_APPS 中的每个应用程序运行测试。您会希望 mytest 命令继承 django.core.management.base.AppCommand。 django.core.management.call_command 也会有所帮助。
此方法的唯一问题是您必须不断维护 MY_INSTALLED_APPS 设置以确保其正确。
【讨论】:
settings.py 中结合 MY_INSTALLED_APPS 和 INSTALLED_APPS 来实现。然后,只需在将应用程序添加到设置时决定是否要使用 mytest 运行应用程序。
您可以为您的一个应用创建一个 management/commands/testmyapps.py,它具有:
from django.core.management.base import BaseCommand, CommandError
import django.core.management.commands.test
from django.core import management
from django.conf import settings
class Command(django.core.management.commands.test.Command):
args = ''
help = 'Test all of MY_INSTALLED_APPS'
def handle(self, *args, **options):
super(Command, self).handle(*(settings.MY_INSTALLED_APPS + args), **options)
【讨论】:
这在 Django 1.6+ 中效果更好:当你运行 python manage.py test, 时,只有你的测试会运行(假设你有 TEST_RUNNER 的默认设置)
【讨论】:
使用鼻子 django 测试运行器,它会处理这个问题。
【讨论】: