【问题标题】:Using django-nose and django-celery together -- unit testing一起使用 django-nose 和 django-celery -- 单元测试
【发布时间】:2013-03-13 01:02:15
【问题描述】:

我有一个使用 django-nose 的 django 项目。我想将django-celery 添加到项目中。我使用单元测试。 django-nose 和 django-celery 都需要在我的 settings.py 文件中设置 TEST_RUNNER 。具体来说:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

对于 django-nose 和:

TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'

用于 django-celery。

我应该如何处理这两个包?

【问题讨论】:

  • +1 idk,可能必须继承一个并将另一个的功能添加到您自己的类中。

标签: django celery django-celery django-nose


【解决方案1】:

我发现处理这个问题的最佳方法是跳过 Celery 测试运行器。我只是用@override_settings(CELERY_ALWAYS_EAGER=True) 装饰我的芹菜使用测试,一切都得到了很好的测试。

【讨论】:

    【解决方案2】:

    如果您能够将测试隔离为 celery 和非 celery 依赖的功能,您可以在调用 celery 任务的测试类上尝试overriding settings

    from django.test.utils import override_settings
    
    @override_settings(TEST_RUNNER='djcelery.contrib.test_runner.CeleryTestSuiteRunner')
    class AsyncTestCase(TestCase):
         def test_async(self):
             self.assertEquals(add.delay(4,4), 8)
    

    而 NoseTestRunner 将在 settings.py 中设置为默认值

    【讨论】:

    • 谢谢——我会研究这种方法。
    【解决方案3】:

    您可以将 Celery runner 和 Nose runner 子类化,然后您就可以得到它们的优点。

    from django_nose import NoseTestSuiteRunner
    from djcelery.contrib.test_runner import CeleryTestSuiteRunner
    
    class TestRunner(CeleryTestSuiteRunner, NoseTestSuiteRunner):
        pass
    

    然后在您的设置中:

    TEST_RUNNER = '<package to>.TestRunner'
    

    为什么会这样:

    help(TestRunner)
    

    你得到:

    |  Method resolution order:
    |      TestRunner
    |      djcelery.contrib.test_runner.CeleryTestSuiteRunner
    |      django_nose.runner.NoseTestSuiteRunner
    |      django_nose.runner.BasicNoseRunner
    |      django_nose.runner.BaseRunner
    |      django.test.runner.DiscoverRunner
    |      builtins.object
    

    测试 CeleryTestRunner 什么也没做,只是设置了一些配置,然后调用 super().setup_test_environment()。然后超级将在该链中寻找 setup_test_environment() 。

    观看 Raymond Hettinger 的视频:超级被认为是超级(here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 2023-04-09
      • 1970-01-01
      • 2015-06-28
      • 2014-08-04
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多