Robotframework Robot FW:收藏库:“复制词典”:如何制作复合词典的浅拷贝?

Robotframework Robot FW:收藏库:“复制词典”:如何制作复合词典的浅拷贝?,robotframework,Robotframework,考虑以下代码: 在Utils.py中: 在collection-library-tests.robot中 该目标在测试用例中陈述为: 如果我们通过浅拷贝修改包含的对象,即深拷贝, 原始的component_python_字典将看到所包含对象中的更改 预期结果 观察结果 注意,我使用的是Robot FW版本:Robot Framework 3.1.2 Python linux上的3.7.4 根据: deepcopy参数控制返回的字典是否为 浅拷贝或深拷贝。默认情况下,返回一个浅拷贝,但可以是 通

考虑以下代码:

在Utils.py中:

在collection-library-tests.robot中

该目标在测试用例中陈述为:

如果我们通过浅拷贝修改包含的对象,即深拷贝, 原始的component_python_字典将看到所包含对象中的更改

预期结果

观察结果

注意,我使用的是Robot FW版本:Robot Framework 3.1.2 Python linux上的3.7.4

根据:

deepcopy参数控制返回的字典是否为 浅拷贝或深拷贝。默认情况下,返回一个浅拷贝,但可以是 通过给deepcopy一个真值进行更改,请参见布尔参数。这是Robot Framework 3.1.2中的一个新选项。早期版本总是 返回浅拷贝

根据:


某些关键字接受作为布尔值true或false处理的参数。如果此类参数以字符串形式给出,则如果它是空字符串或等于false、NONE、NO、OFF或0,则视为false,不区分大小写。其他字符串无论其值如何都被视为true


还请注意,我还尝试了deepcopy=${False},这产生了相同的观察结果。

问题不在于RF关键字,而在于它很少有,它们有广泛的UT,而在于您调用它的方式,即此参数:

deepcopy=False
您可能认为传递的是布尔值,但实际上传递的是字符串False。 在关键字的实现中有以下分支:

    if deepcopy:
        return copy.deepcopy(dictionary)
,并且当非空字符串的计算结果为True时,实际上您将获得一个深度副本

这是传递真假的方法:


我根据你的评论更新了机票。长话短说,deepcopy=${False}也不起作用。可以在您的计算机上运行此代码吗?感谢Todor。有些关键字接受作为布尔值处理的参数…-这个没有,检查它的实现。我不能很快运行您的代码,但是如果它与正确的布尔值false不符,我会非常惊讶。我承认您提供的代码链接确实与关键字文档中的说法不同。因此,一个问题是代码和文档之间的冲突。另一个问题是,给定您提供的代码,deepcopy=${False}不起作用,我删除了所有测试日志并重新运行测试用例两次。原因是什么?离题了,但我看不出关键字的文档与其实现有什么不同;它精确地描述了关键字的作用。关键字的文档说明deepcopy=False或deepcopy=${False}将被视为虚假值,因此将发生浅层复制。请注意,我用关键字文档更新了此票据。
Should Be Equal      ${compound_python_dictionary}[deep_dict][key2]       modified  # passes
deepcopy=False
    if deepcopy:
        return copy.deepcopy(dictionary)
deepcopy=${False}