我希望能够模拟一个改变参数的函数,并且它的改变是相关的,以便代码继续正确执行。
请考虑以下代码:
def mutate_my_dict(mutable_dict):
if os.path.exists("a.txt"):
mutable_dict["new_key"] = "new_value"
return True
def function_under_test():
my_dict = {"key": "value"}
if mutate_my_dict(my_dict):
return my_dict["new_key"]
return "No Key"
def test_function_under_test():
with patch("stack_over_flow.mutate_my_dict") as mutate_my_dict_mock:
mutate_my_dict_mock.return_value = True
result = function_under_test()
assert result == "new_value"
请理解,我知道在这种情况下我可以模拟os.path.exists,但这只是一个示例。我有意模拟函数,而不是外部模块。
我也读了这里的文档:但它似乎不适合我的情况。
这是我到目前为止编写的测试,但它显然不起作用,因为密钥发生了变化:
def test_function_under_test():
with patch("stack_over_flow.mutate_my_dict") as mutate_my_dict_mock:
mutate_my_dict_mock.return_value = True
result = function_under_test()
assert result == "new_value"
提前感谢您的所有时间:)
1条答案
按热度按时间bnl4lu3b1#
在彼得的帮助下,我想出了最后一个测试:
它的工作原理是,你可以运行一个函数而不是原来的函数,在这个函数中,你需要改变所有的参数,并返回返回的值。