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 视为 dict,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24073872/