如何对字典的函数输出列表进行单元测试?

时间:2016-07-01 18:48:17

标签: python python-3.x testing

我正在为一个返回字典列表的函数编写单元测试。检查输出是否符合预期的最佳方法是什么? 在这里,"正如所料"表示列表中的词典具有相同的键和值,无论词典中键的顺序如何,或列表中的词典顺序如何。所以像这样:

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.

2 个答案:

答案 0 :(得分:9)

如果您使用unittest,则有a method for this

self.assertItemsEqual(actual_output, expected_output)

在Python-3中,此方法重命名为assertCountEqual

答案 1 :(得分:0)

在这里,我对assertEqualassertCountEqual之间的值做了简单的比较。

对于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}])

以上结果:

PyCharm Screenshot

失败的原因是: enter image description here

因此,assertCountEqual用于OP的情况。


此测试是在PyCharm最新版本和Python 3.5中完成的