Python 如何对运行芹菜任务的代码进行单元测试?
我正在使用的应用程序非常异步。web应用程序根据用户操作通过芹菜运行许多任务。芹菜任务本身能够启动进一步的任务 下面所示的代码经常出现在我们的代码库中Python 如何对运行芹菜任务的代码进行单元测试?,python,unit-testing,celery,pyramid,pytest,Python,Unit Testing,Celery,Pyramid,Pytest,我正在使用的应用程序非常异步。web应用程序根据用户操作通过芹菜运行许多任务。芹菜任务本身能够启动进一步的任务 下面所示的代码经常出现在我们的代码库中 def do_sth(): logic(); if condition: function1.apply_async(*args) else: function2.apply_asynch(*args) 现在我们想开始单元测试我们编写的任何新代码,但我们不确定如何做到这一点。我们想在我
def do_sth():
logic();
if condition:
function1.apply_async(*args)
else:
function2.apply_asynch(*args)
现在我们想开始单元测试我们编写的任何新代码,但我们不确定如何做到这一点。我们想在我们的pytest
单元测试中断言的是,我们想看看function1是否真的被调用了。我们不需要运行function1
本身,因为我们将对function1
进行单元测试
我不想将芹菜作为一个进程运行,也不想在单元测试会话期间运行任何AMQP代理
这是可以实现的吗
编辑
有人指出,这是一个复制品
事实并非如此。想想看。我要问的是如何测试函数是否通过apply\u async调用了function1。这个问题是关于如何测试函数1本身。这是一个很大的区别。在构建这个函数之前,我确实遇到了这个问题。看看这个模块,它允许用“mock”替换您不想被调用的函数,mock看起来与原始函数非常相似,从而使调用代码相信它调用的是“真实的东西”。然后,您可以检查是否实际调用了mock以及使用了哪些参数。例如:
from unittest.mock import patch
def test_do_sth():
with patch('function1.apply_async') as function1_mock:
do_sth()
assert function1_mock.called
可能的重复不是重复我看到过这个问题,也不是我要问的。如果不清楚,请询问更多问题注意,您也可以使用
function1\u mock.assert\u called\u once\u with(*args)
来测试调用的数量,以及是否使用正确的参数调用。您还可以使用补丁作为测试函数的装饰器(在本例中,test\u do\u sth),这是我更喜欢的。