封装外的模拟函数
Mock function outside package
我正在开发一个带有不同应用程序的 Django 软件。我正在测试一些视图,我想在这些视图中模拟函数的 return 。
例如我有这个视图(位于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 的情况下模拟到 return 固定值的函数。
我在 apps.policies.tests.test_views 对这个视图进行了一些测试。作为测试示例,我有:
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 的内容时它 return 是空的。
希望我解释正确,提前致谢!
我在这里吸取了教训:
"If you want to run a function whenever a mock is called, that's side_effect, not 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
这里有一个link的例子:
我正在开发一个带有不同应用程序的 Django 软件。我正在测试一些视图,我想在这些视图中模拟函数的 return 。
例如我有这个视图(位于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 的情况下模拟到 return 固定值的函数。
我在 apps.policies.tests.test_views 对这个视图进行了一些测试。作为测试示例,我有:
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 的内容时它 return 是空的。
希望我解释正确,提前致谢!
我在这里吸取了教训:
"If you want to run a function whenever a mock is called, that's side_effect, not 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
这里有一个link的例子: