Python unittest 的 assertDictContainsSubset 推荐替代

标签 python python-3.x unit-testing

我有一些用 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 中相同的值,即 ab 的子集.

关于Python unittest 的 assertDictContainsSubset 推荐替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20050913/

相关文章:

python - 在 Python 中使用迭代而不是递归遍历二叉树

python - 使用 asyncio.gather 不会引发内部异常

java - 是否不需要验证与 Mockito 中模拟的方法相同的方法?

python - 如何解决 tkinter 渲染质量低的问题

python - 将 pyBarcode 输出转换为 PIL 图像文件

python - 无法使按钮(使用 tkinter 创建)自动退出

python - Python 中的 for 循环问题中的 Tkinter 按钮

c# - 如何使用异步方法对 ViewModel 进行单元测试。

javascript - Sails.js:如何实际运行测试

python - 将变化率列添加到 Pandas DataFrame