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