[英]Mock function outside package
我正在開發帶有不同應用程序的Django軟件。 我正在測試一些視圖,並且想在這些視圖中模擬函數的返回。
例如,我有此視圖(位於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中對此視圖進行了一些測試。 作為測試示例,我有:
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的內容時,它將返回空。
希望我已經正確解釋了,在此先感謝!
我在這里學到了教訓:
“如果要在每次調用模擬時都運行一個函數,那就是side_effect,而不是return_value”
在TestClass之外,添加一個func:
local_save_to_ipfs():
IPFS_JSON_MOCK = {"Hash": "mockhash"}
return IPFS_JSON_MOCK
在UpdatePolicyDocumentMockCase
內部, UpdatePolicyDocumentMockCase
更改,它應該可以工作。
它應該只是一個不帶()的函數名稱
mock_method.side_effect = local_save_to_ipfs()
這是沒有圓括號或括號的正確方法
mock_method.side_effect = local_save_to_ipfs
這是一個示例的鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.