[英]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.