簡體   English   中英

如何在單元測試期間捕獲Celery任務?

[英]How do I capture Celery tasks during unit testing?

如何在不運行單元測試期間創建的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(…)

您可以在沒有后端(內存或其他方式)的情況下運行這些測試,在前端代碼和任務代碼之間保持干凈的中斷,並且可以測試多個代碼路徑,這些路徑通常會在沒有運行的情況下排隊長時間運行的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM