我有一些用 unittest 编写的 Python 测试。我想检查我的一些字典是否至少包含某些等于某些值的属性。如果有额外的值(value),那很好。 assertDictContainsSubset
将是完美的,只是它已被弃用。有没有更好的东西我应该使用,或者如果它们在目标字典中,我应该递归地断言内容相等?
文档建议使用 addTypeEqualityFunc
,但在某些情况下,我确实希望对 dicts 使用普通的 assertEqual
。
最佳答案
在 Python 3.9+ 上,使用 dictionary union operator .
改变
assertDictContainsSubset(a, b)
到
assertEqual(b, b | a)
在旧版本的 Python 上,将其更改为
assertEqual(b, {**b, **a})
注意参数的顺序,assertDictContainsSubset
将“较大的”字典( b
)放在第二位,将子集( a
)放在首位,但是将较大的字典( b
)放在首位更有意义(这就是为什么 assertDictContainsSubset
在第一个被删除的原因地点)。
这将创建 b
的副本然后迭代 a
, 将任何键设置为 a
中的值然后将该结果与原始 b
进行比较.如果可以添加 a
的所有键/值至b
并且仍然有相同的字典,这意味着a
不包含任何不在 b
中的键并且它包含的所有键都具有与 b
中相同的值,即 a
是 b
的子集.
关于Python unittest 的 assertDictContainsSubset 推荐替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20050913/