我在测试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值?也许它与多线程有关?谢谢!