gpt4 book ai didi

python-3.x - 封装外的模拟函数

转载 作者:行者123 更新时间:2023-11-28 20:50:32 25 4
gpt4 key购买 nike

我正在开发一个带有不同应用程序的 Django 软件。我正在测试一些 View ,我想在这些 View 中模拟函数的返回。

例如我有这个 View (位于 apps.policies.views):

def upload_policy_document(request):

# code fragment avoid

# save document ot ipfs
response_data = save_to_ipfs(app_name=app_name,
process_instance=process_instance,
file=policy_document)
# more code avoided

return JsonResponse(data=response_data)

函数 save_to_ipfs 位于 apps.utils.ipfs_storage 并且是我想要模拟以在不连接到 IPFS 的情况下返回固定值的函数。

我在 apps.policies.tests.test_views 中对此 View 进行了一些测试。作为测试示例,我有:

class UpdatePolicyDocumentMockCase(SimpleTestCase):

IPFS_JSON_MOCK = {"Hash": "mockhash"}

def setUp(self):
# some setup before tests

@patch('apps.utils.ipfs_storage.save_to_ipfs')
def some_test(self, mock_method):

mock_method.return_value = self.IPFS_JSON_MOCK
self.assertEqual(save_to_ipfs("", "", ""), self.IPFS_JSON_MOCK)

问题是模拟不起作用,当返回必须是 self.IPFS_JSON_MOCK 的内容时,它返回空。

我希望我解释正确,提前致谢!

最佳答案

我在这里吸取了教训:

“如果你想在调用 mock 时运行一个函数,那就是 side_effect,而不是 return_value”

在 TestClass 之外,添加一个函数:

local_save_to_ipfs():
IPFS_JSON_MOCK = {"Hash": "mockhash"}
return IPFS_JSON_MOCK

UpdatePolicyDocumentMockCase 中,更改为这个,它应该可以工作。

它应该只是一个没有 () 的函数名

mock_method.side_effect = local_save_to_ipfs()

这是没有圆括号或圆括号的正确方法

mock_method.side_effect = local_save_to_ipfs

这里是一个例子的链接:

https://fgimian.github.io/blog/2014/04/10/using-the-python-mock-library-to-fake-regular-functions-during-tests/

关于python-3.x - 封装外的模拟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com