如何模拟芹菜任务的类方法



使用 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')

并且测试失败。原始函数是被调用的函数。不,这个问题对我没有帮助。

(我没有启动并运行芹菜实例,所以我很难测试这个)

应用程序代码中的目标函数是类方法。测试代码模拟的函数是一个实例方法。

像这样更改test_task1是否有帮助 -

 def test_task1(self):
     FancyTask.helper_method1 = mock.MagickMock(return_value='42') 
     task = tasks.task1
     res = task.delay('blah')
     task.helper_method1.assert_called_with('blah')

您可能还需要更改assert_called_with以便从类级别而不是实例级别调用它。

改变

     task.helper_method1.assert_called_with('blah')    

     FancyTask.helper_method1.assert_called_with('blah')

相关内容

  • 没有找到相关文章

最新更新