我正在开发一个包含不同应用程序的Django软件。我正在测试一些视图,我想在这些视图中模拟函数的返回。
例如,我有这个视图(位于apps.policies.views):
Traceback (most recent call last):
File "test.py", line 29, in <module>
hary = ret_cuda.copy_to_host()
File "C:\ProgramData\Anaconda3\envs\ncuda\lib\site-packages\numba\cuda\cudadrv\devices.py", line 212, in _require_cuda_context
return fn(*args, **kws)
File "C:\ProgramData\Anaconda3\envs\ncuda\lib\site-packages\numba\cuda\cudadrv\devicearray.py", line 237, in copy_to_host
_driver.device_to_host(hostary, self, self.alloc_size, stream=stream)
File "C:\ProgramData\Anaconda3\envs\ncuda\lib\site-packages\numba\cuda\cudadrv\driver.py", line 1606, in device_to_host
fn(host_pointer(dst), device_pointer(src), size, *varargs)
File "C:\ProgramData\Anaconda3\envs\ncuda\lib\site-packages\numba\cuda\cudadrv\driver.py", line 288, in safe_cuda_api_call
self._check_error(fname, retcode)
File "C:\ProgramData\Anaconda3\envs\ncuda\lib\site-packages\numba\cuda\cudadrv\driver.py", line 323, in _check_error
raise CudaAPIError(retcode, msg)
numba.cuda.cudadrv.driver.CudaAPIError: [719] Call to cuMemcpyDtoH results in UNKNOWN_CUDA_ERROR
函数save_to_ipfs位于apps.utils.ipfs_storage,是我想要模拟的函数,无需连接到IPFS即可返回固定值。
我在apps.policies.tests.test_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)
问题是模拟不起作用,当reurn必须是self.IPFS_JSON_MOCK的内容时它返回空。
我希望我已经正确解释了,先谢谢!
答案 0 :(得分:0)
我在这里吸取了教训:
“如果你想在调用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
以下是一个示例的链接: