【发布时间】:2019-04-15 17:14:37
【问题描述】:
我的文件夹结构
main.py
class Class1
generate_columns()
column_api()
utilities.py
class Class2
get_response()
我想在class Class1 中模拟column_api() 函数。
函数签名如下:
class Class1:
def generate_columns():
calls `get_response()` from `class Class2` and returns response
def column_api(data=List[Dict]]):
resp = self.generate_columns(data)
for item in resp:
if data["name"] == item["name"]:
ret.append(item)
return ret
我想模拟column_api。这是我到目前为止的测试:
def test_column_api():
testClass = Class1()
mock_response = [{"id":"1", "name":"test1"}]
load_data = [{"id":"1", "name":"test1"}, {"id":"2", "name":"test2"}]
with patch("package.main.Class1.generate_columns") as api_mock:
api_mock.return_value = mock_response
result = testClass.column_api(load_data)
assert len(result) == 1
它在这里失败,AssertionError。无论我尝试多少,返回的列表总是空的。但理想情况下,根据我的函数定义,返回的列表应该有一个字典,其名称与响应对象中的名称匹配。
我对 Python 中的 Mock 和 patch 概念非常陌生。在阅读了关于 SO 的各种帖子和Mock 上的实际文档之后,我可以走到这一步。我认为我的api_mock 没有被column_api 函数使用。我认为这就是问题所在,但我不确定如何让column_api 识别api_mock。非常感谢您对此的任何帮助!希望我的函数定义在这里很清楚,但我很高兴包含我可能错过的任何其他信息。
提前非常感谢您。很长一段时间以来,我一直在为此烦恼。希望能在这里找到一些答案。
【问题讨论】:
标签: python-3.x unit-testing mocking patch