我怎样才能自动指定一个模拟的Celery函数

时间:2014-05-15 06:25:18

标签: python unit-testing mocking celery

在调用celery任务的情况下,使用autospec模拟函数的最简单方法是什么?

例如在python Python 2.7.5中,这段代码将正常传递:

from mock import create_autospec
from celery import task

@task
def function(a, b, c):
    pass

mock_function = create_autospec(function)
mock_function.delay('wrong arguments')

什么时候应该提出异常,因为芹菜延迟了#39;方法将接受任何参数。

1 个答案:

答案 0 :(得分:5)

您实际上是在尝试测试Task.run()函数的参数。

请参阅以下文档: http://celery.readthedocs.org/en/latest/userguide/tasks.html#custom-task-classes http://celery.readthedocs.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.run

使用提供给任务的参数调用

run()。如果要确保在测试期间提供正确的参数,请执行以下操作:

from mock import create_autospec
from celery import task

@task
def function(a, b, c):
    pass

mock_function = create_autospec(function)
mock_function.run('wrong arguments')

然后你应该在输出中看到你期望的错误

TypeError: <lambda>() takes exactly 4 arguments (2 given)