Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在单元测试期间跳过发送电子邮件功能和芹菜任务_Python_Unit Testing_Django Rest Framework_Mocking_Celery - Fatal编程技术网

Python 在单元测试期间跳过发送电子邮件功能和芹菜任务

Python 在单元测试期间跳过发送电子邮件功能和芹菜任务,python,unit-testing,django-rest-framework,mocking,celery,Python,Unit Testing,Django Rest Framework,Mocking,Celery,我有一个Django的观点,我想对它进行单元测试,但问题是在函数的某一行,它调用了另一个具有发送电子邮件功能的函数,而这个发送电子邮件功能中有一个芹菜任务。我不知道该怎么做才能超越这个函数调用,因为当调试器点击sendmail函数时,它会停止,并且什么也不做,我认为这是因为芹菜任务。 由于这个问题,我的单元测试无法完全运行 所以如果有人能告诉我该怎么做,我会很高兴的。我自己的解决方案是模拟发送电子邮件功能,但它不起作用。我不知道现在该怎么办 下面是查看函数期间发生的代码示例 view_funti

我有一个Django的观点,我想对它进行单元测试,但问题是在函数的某一行,它调用了另一个具有发送电子邮件功能的函数,而这个发送电子邮件功能中有一个芹菜任务。我不知道该怎么做才能超越这个函数调用,因为当调试器点击sendmail函数时,它会停止,并且什么也不做,我认为这是因为芹菜任务。 由于这个问题,我的单元测试无法完全运行
所以如果有人能告诉我该怎么做,我会很高兴的。我自己的解决方案是模拟发送电子邮件功能,但它不起作用。我不知道现在该怎么办
下面是查看函数期间发生的代码示例

view_funtion():
...
function_a is called here
如果我需要补充更多细节,请告诉我。谢谢
更新
这是单元测试功能

@patch('path_to_send_email_function')
    def test_view_function(self, mock_send_email):
       mock_send_email.return_value = None
       ...

我还使用用于Django rest框架的API请求工厂来测试视图。执行步骤在测试的主体中,调用view函数,直到调用函数a,然后在函数a的主体中调用send_email_函数。您可以模拟该函数。您是如何尝试模拟
send_email_函数的?请注意,如果模块(在本例中为
send\u email\u function
模块)已加载,则该功能不起作用。@AttilaViniczai我使用了该修补程序,但我不知道为什么它不能按预期工作。让我更新问题以显示单元测试功能。我建议查看此问题中列出的解决方法:我的建议如下:在要使用
发送电子邮件功能的模块中,导入
发送电子邮件功能的模块,而不是功能本身。因此,使用
导入发送电子邮件的模块,而不是导入发送电子邮件的模块
。这将使模拟工作如预期的那样。@AttilaViniczai我将尝试您的解决方案,并在这里告诉结果,以防其他人想要使用此解决方案
send_email_function():
some code here and initialization of the email template
celery_task.delay()
@patch('path_to_send_email_function')
    def test_view_function(self, mock_send_email):
       mock_send_email.return_value = None
       ...