我正在尝试为python中的自定义函数制作一个简单的模拟。此函数调出aws,并返回环境中所有实例的IP地址列表。由于我正在编写单元测试,因此我希望能够模拟该函数的响应,因此无需点击AWS即可进行测试。
我认为问题出在我使用的目标上。我已经尽力了,但是没有任何运气。
我已经尝试过使用补丁的方式:
def test_mock_ip_response(self):
with patch("app.api.commands.ip_addresses", return_value=["10.10.10.10"]):
results=ip_addresses("stage")
print (results)
assert False
并带有装饰器:
@patch("app.api.commands.ip_addresses")
def test_mock_bash_response(self, mock_ip_addresses):
mock_ip_addresses.return_value=["10.10.10.10"]
results=ip_addresses("stage")
print (results)
assert False
无论哪种方式,函数ip_addresses总是尝试调出AWS,因此该呼叫被捕获。
哦,我知道asserts设置为false,只是pytest会向我显示测试的标准输出。
更新: 包括ip_addresses的代码:
def ip_addresses(environment: str) -> List[str]:
client = get_client("ec2")
filters = #removed since they contain naming conventions
response = client.describe_instances(Filters=filters)
return [
i["PrivateIpAddress"] for r in response["Reservations"] for i in r["Instances"]
]
答案 0 :(得分:0)
我可以使用它了,所以请确保将答案发布在这里。这与我在测试函数中调用ip_addresses
的方式有关。
代替呼叫
results=ip_addresses
我只需要将其更改为:
results=commands.ip_addresses