如何对过滤器进行单元测试?

How do I unit test a filter?

我正在使用过滤器 remove empty values from a list:

def clean_list(inp):
  return filter(None, inp)

如何对这段代码进行单元测试?

以下所有操作均失败,因为 clean_list 的 return 是一个 filter 对象,它与以下任何一个都不匹配:

assert clean_list(['']) == []
assert clean_list(['']) == ['']
assert clean_list(['']) == filter(None, [''])
assert clean_list(['']) == filter(None, [])

根据 this question 的评论和确认,最好的解决方案似乎是 "consume" 过滤器。 因为我正在使用参数化测试,所以最好的选择是在函数本身和 return 一个普通列表中执行此操作。

所以我的 clean_list 函数现在是:

def clean_list(inp):
  return list(filter(None, inp))

现在通过了以下单元测试:

assert clean_list(['']) == []