我正在为一个返回字典列表的函数编写单元测试。检查输出是否符合预期的最佳方法是什么? 在这里,"正如所料"表示列表中的词典具有相同的键和值,无论词典中键的顺序如何,或列表中的词典顺序如何。所以像这样:
expect_output = [ {"c":4} , {"a" : 4 , "b" : 3}]
actual_ouput = [{"b" : 3, "a" : 4 }, {"c":4}]
# some function that would return true in this case.
答案 0 :(得分:9)
如果您使用unittest
,则有a method for this:
self.assertItemsEqual(actual_output, expected_output)
在Python-3中,此方法重命名为assertCountEqual
答案 1 :(得分:0)
在这里,我对assertEqual
和assertCountEqual
之间的值做了简单的比较。
对于assertEqual
->列表的顺序很重要。
对于assertCountEqual
->列表的顺序并不重要。
def test_swapped_elements_1(self):
self.assertEqual([{"b": 1}, {"a": 1, "b": 1}], [{"b": 1, "a": 1}, {"b": 1}])
def test_swapped_elements_2(self):
self.assertCountEqual([{"b": 1}, {"a": 1, "b": 1}], [{"b": 1, "a": 1}, {"b": 1}])
def test_non_swapped_elements_1(self):
self.assertEqual([{"a": 1, "b": 1}, {"b": 1}], [{"b": 1, "a": 1}, {"b": 1}])
def test_non_swapped_elements_2(self):
self.assertCountEqual([{"a": 1, "b": 1}, {"b": 1}], [{"b": 1, "a": 1}, {"b": 1}])
以上结果:
因此,assertCountEqual
用于OP的情况。
此测试是在PyCharm最新版本和Python 3.5中完成的