如何断言确切的预期元素是否在列表中?

时间:2016-11-01 13:27:58

标签: python unit-testing python-3.x pytest

我想对一个获取列表并返回(一个非常不同的)列表的函数进行单元测试。我知道我期望什么元素,但​​我不知道他们将在返回的列表中以什么顺序。我如何断言确切地说这些元素在列表中是否正确?我想用py.test做到这一点。另外:我希望有多个副本。

4 个答案:

答案 0 :(得分:3)

假设元素是可散列且唯一的,只需使用sets:

set(l) == set(f(l))

如果这些条件不适用,请对它们进行排序:

sorted(l) == sorted(f(l))

并且collections.Counter,如果这些元素是可清除且非唯一的:

import collections

collections.Counter(l) == collections.Counter(f(l))

答案 1 :(得分:1)

如果订单无关紧要,请对两个列表进行排序并检查其相等性

echo $text{$i}; // f

答案 2 :(得分:1)

如果我理解正确,您想测试列表A和列表B是否具有完全相同的元素,包括重复但忽略顺序。
这需要使用计数器:

from collections import Counter
wanted_elements = [1, 1, 2, 3, 4, 4, 4, 4]
input_list = [1, 2, 1, 4, 4, 4, 4, 3]
c1 = Counter(wanted_elements)
c2 = Counter(input_list)
assert c1 == c2

答案 3 :(得分:0)

您可能想要使用设置操作差异:

list_to_test = [1,2,3,4,5,5,4,3,2,1,2]
wanted_elements = [1,2,3]
d = set(list_to_test).difference(set(wanted_elements))
print d
set([4, 5])

所以最终你会断言len(d)== 0。