如何断言包含列表的字典(列表项不遵循任何顺序)?

时间:2019-09-24 10:53:21

标签: python python-3.x python-unittest

我知道几种在python中对列表值进行单元测试的方法:

  1. AssertEqual
  2. AssertListEqual
  3. AssertCountEqual

以上所述,如果更改项目顺序,则第一和第二失败。

因此,忽略排序顺序的第三个选项对我测试列表值很有用。

问题:是否有 assert 等于包含列表的测试字典(列表项不遵循任何顺序)?

示例:{'StatusCode':'ERR','Msg':'Error on processing','CustomerIds': [44,11,23,5,23]}

2 个答案:

答案 0 :(得分:0)

这是您要寻找的吗?

>>> class DemoTest(unittest.TestCase):
...     a = { 'test' : 4, 'test1': 5}
...     b = { 'test1' : 5, 'test' : 4}
...     def test_dict(self):
...             self.assertDictEqual(self.a, self.b)
...
>>> DemoTest()
<__main__.DemoTest testMethod=runTest>
>>> d = DemoTest()
>>> unittest.main()
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

答案 1 :(得分:0)

您可以尝试以下方法:

d1 = {'StatusCode':'ERR','Msg':'Error on processing','CustomerIds': [44,11,23,5,23]}
d2 = {'Msg':'Error on processing','StatusCode':'ERR','CustomerIds': [44,11,23,5,23]}
d3 = {'Msg':'Error on processing','CustomerIds': [44,11,23,5,23]}
assert d1.items() == d2.items()
assert d1.items() == d3.items()

第一个断言将执行路径-第二个失败