【问题标题】:How do I run tests for all my Django apps only?如何仅为我的所有 Django 应用程序运行测试?
【发布时间】:2010-02-24 19:54:17
【问题描述】:

现在,如果我想从我的所有应用中运行测试,我会这样做:

python manage.py test app1 app2 app3

如果我跑:

python manage.py test

测试INSTALLED_APPS 中的所有应用程序,包括 django 应用程序。是否有一个简单的命令来运行我创建的所有应用程序的测试?

【问题讨论】:

    标签: django


    【解决方案1】:

    遗憾的是没有这样的命令。 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 运行应用程序。
    【解决方案2】:

    您可以为您的一个应用创建一个 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)
    

    【讨论】:

      【解决方案3】:

      这在 Django 1.6+ 中效果更好:当你运行 python manage.py test, 时,只有你的测试会运行(假设你有 TEST_RUNNER 的默认设置)

      【讨论】:

        【解决方案4】:

        使用鼻子 django 测试运行器,它会处理这个问题。

        参考: Django nose to run only project tests

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-01
          • 2015-12-19
          • 2011-05-31
          • 1970-01-01
          相关资源
          最近更新 更多