无法测试是否使用Mock by Celery调用方法

时间:2017-08-31 07:54:35

标签: python django unit-testing mocking

我在测试Celery任务是否成功执行时遇到问题。我的任务调用另一个可重用的函数,它将请求发送到另一个服务器:

@shared_task
def my_task():
    send_request_to_server()

我正在使用mock来检查函数send_request_to_server()是否被调用。任务通过Django Admin更改列表操作触发,因此最终测试如下所示:

@override_settings(CELERY_TASK_ALWAYS_EAGER=True)    
@mock.patch(‘helpers.send_request_to_server’)
def my_test(self, mocked_function):
    change_url = reverse('admin:app_model_changelist')
    response = self.client.post(change_url, {'action': ‘mark’, '_selected_action': [1]}, follow=True)
    self.assertTrue(mocked_function.called)

我100%肯定,这个测试在某些时候调用send_request_to_server()函数,因为这个函数也创建了一个文件,很容易注意到这一点。但是mocked_function属性“被调用”仍然保持False的值。我也很确定,模拟装饰器路径是正确的,因为简化的测试通过没有任何问题:

@override_settings(CELERY_TASK_ALWAYS_EAGER=True)    
@mock.patch(‘helpers.send_request_to_server’)
def my_test(self, mocked_function):
    send_request_to_server()
    self.assertTrue(mocked_function.called)

即使调用该函数,可能导致mocked_function.called的False值?也许它与多线程有关?谢谢!

0 个答案:

没有答案