1
使用python 2.7,celery 3.0.24和mock 1.0.1。我有這樣的:我該如何模擬芹菜的一種方法任務
class FancyTask(celery.Task):
@classmethod
def helper_method1(cls, name):
"""do some remote request depending on name"""
return 'foo' + name + 'bar'
def __call__(self, *args, **kwargs):
funcname = self.name.split()[-1]
bigname = self.helper_method1(funcname)
return bigname
@celery.task(base=FancyTask)
def task1(*args, **kwargs):
pass
@celery.task(base=FancyTask)
def task2(*args, **kwargs):
pass
我怎樣才能修補helper_method1
在測試無論是任務?
我已經試過類似:
import mock
from mymodule import tasks
class TestTasks(unittest.TestCase):
def test_task1(self):
task = tasks.task1
task.helper_method1 = mock.MagickMock(return_value='42')
res = task.delay('blah')
task.helper_method1.assert_called_with('blah')
和測試失敗。原始函數是被調用的函數。不,this question沒有幫助我。
到@rahtanoj:原來'helper_method1'被調用。 '延遲'安排任務,一名芹菜工作人員立即採摘。在worker的輸出中,我看到由於'requests.get'給一個不可訪問的主機而引起的原始'helper_method1'引發的異常。 – mmoya
我沒有注意到helper_method1是一個classmethod。更新了答案以反映這一點。 – rahtanoj
最後一個變化 - 刪除了模擬的'classmethod'調用。 – rahtanoj