gpt4 book ai didi

python - UserDict 不被 unittest 视为字典

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:26 25 4
gpt4 key购买 nike

import unittest
from UserDict import UserDict

class MyDict(UserDict):
def __init__(self, x):
UserDict.__init__(self, x=x)

class Test(unittest.TestCase):
def test_dict(self):
m = MyDict(42)
assert {'x': 42} == m # this passes
self.assertDictEqual({'x': 42}, m) # failure at here

if __name__ == '__main__':
unittest.main()

我得到了

AssertionError: Second argument is not a dictionary

我应该使用内置的 dict 作为基类,而不是 UserDict 吗?

最佳答案

问题是 assertDictEqual()首先检查两个参数是否都是 dict 实例:

def assertDictEqual(self, d1, d2, msg=None):
self.assertIsInstance(d1, dict, 'First argument is not a dictionary')
self.assertIsInstance(d2, dict, 'Second argument is not a dictionary')
...

并且,UserDict 不是 dict 的实例:

>>> m = UserDict(x=42)
>>> m
{'x': 42}
>>> isinstance(m, dict)
False

不要直接使用 UserDict 类,而是使用包含真实字典的 data 属性:

self.assertDictEqual({'x': 42}, m.data)

或者,正如其他人已经建议的那样,只使用普通词典。

关于python - UserDict 不被 unittest 视为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24073872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com