我希望能够模拟改变参数的函数,并且它的Mutations 是相关的,以便代码继续正确执行.

请考虑以下代码:

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.存在,但这只是一个例子.我故意想模拟函数,而不是外部模块. **

我还阅读了这里的文档: https://docs.python.org/3/library/unittest.mock-examples.html#coping-with-mutable-arguments个 但它似乎不适合我的箱子.

这是我到目前为止编写的测试,但它显然不起作用,因为密钥发生了变化:

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"

提前感谢您的宝贵时间:)

推荐答案

在彼得的帮助下,我想出了最后的测试:

def mock_mutate_my_dict(my_dict):
    my_dict["new_key"] = "new_value"
    return True


def test_function_under_test():
    with patch("stack_over_flow.mutate_my_dict") as mutate_my_dict_mock:
        mutate_my_dict_mock.side_effect = mock_mutate_my_dict
        result = function_under_test()
    assert result == "new_value"

它的工作原理是,在有副作用的情况下,您可以运行函数而不是预期的函数. 在此函数中,您需要更改所有变异参数并返回返回值.

Python相关问答推荐

Odoo 14 hr. emergency.public内的二进制字段

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

max_of_three使用First_select、second_select、

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

如何使用pytest来查看Python中是否存在class attribution属性?

给定高度约束的旋转角解析求解

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

如何指定列数据类型

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

Python避免mypy在相互引用中从另一个类重定义类时失败

pandas:在操作pandora之后将pandora列转换为int

如何获得3D点的平移和旋转,给定的点已经旋转?

一个telegram 机器人应该发送一个测验如何做?""

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

按条件添加小计列

利用SCIPY沿第一轴对数组进行内插

try 使用RegEx解析由标识多行文本数据的3行头组成的日志(log)文件

如何在微调Whisper模型时更改数据集?

as_index=False groupBy不支持count