仅修补深度嵌套的方法调用

时间:2020-11-05 14:31:53

标签: python unit-testing testing mocking python-unittest.mock

在测试功能中,我有这样的代码:

task = TransferTask.objects.get(id=id) # a Django database access
source_connector = task.job.source.server.create_connector()
dest_connector = task.job.destination.server.create_connector()

我想要的是仅修补create_connector方法调用以返回假对象。但是我想为source_connectordest_connector返回不同的伪造对象,这就是patch.object(MyServerClass, "create_connector", return_value=my_fake_connector)无法解决的原因,因为两者最终都将具有相同的伪造对象。

我尝试了类似patch("my_module.TransferTask.job.source.server.create_connector", return_value=my_fake_source_connector)的操作,但是却收到一个错误,提示没有属性source(也许是因为它是相关的Django模型?!)。

我还想保留taskjobsourceserver的真实对象,只修补{{1 }},因为要在功能的其他部分调用其他功能来进行测试,因此必须保持其功能。

那么,修补它的最佳方法是什么?

0 个答案:

没有答案