加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何在单元测试期间捕获Celery任务?

发布时间:2020-12-20 13:40:58 所属栏目:Python 来源:网络整理
导读:如何在不运行单元测试期间创建的Celery任务的情况下捕获? 例如,我想写一个看起来像这样的测试: def test_add_user_avatar(): add_user_avatar(…) tasks = get_deferred_tasks(…) assert_equal(tasks[0],ResizeImageTask(…)) 具体来说,我不想使用ALWAYS_
如何在不运行单元测试期间创建的Celery任务的情况下捕获?

例如,我想写一个看起来像这样的测试:

def test_add_user_avatar():
    add_user_avatar(…)
    tasks = get_deferred_tasks(…)
    assert_equal(tasks[0],ResizeImageTask(…))

具体来说,我不想使用ALWAYS_EAGER – 我的一些任务很慢,并且有自己的一组测试用例.我特别想断言我的前端代码正在创建正确的任务.

解决方法

我的情况类似,我正在使用的策略是模拟调用Celery任务,然后检查运行后对这些模拟的调用.这可以在这里工作吗?

from … import ResizeImageTask


class NonQueuedTestCase(…):

    def setUp(self):
        """
        Patch out ResizeImageTask's delay method
        """
        super(NonQueuedTestCase,self).setUp()
        self.patcher = patch.object(ResizeImageTask,'delay',autospec=True)
        self.m_delay = self.patcher.start()

    def tearDown(self):
        self.patcher.stop()
        super(NonQueuedTestCase,self).tearDown()

    def test_add_user_avatar(self):
        # Make call to front-end code
        add_user_avatar(…)
        # Check delay call was made
        self.m_delay.assert_called_once_with(…)

您可以在没有后端(内存或其他方式)的情况下运行这些测试,在前端代码和任务代码之间保持干净的中断,并且可以测试多个代码路径,这些路径通常会在没有运行的情况下排队长时间运行的任务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读