断言与计数

时间:2013-10-17 09:17:14

标签: python unit-testing tdd python-unittest

什么是最惯用的(应该​​有一个 - 最好只有一个 - 显然是这样做:) :)断言某些事情在可迭代实例中完全 count 次?我想实现下面描述的行为。

checked = 'pum-pum-pata-pum'

#something like this
self.assertIn('pum', checked, count=3) # OK
self.assertIn('pum', checked, count=2) # Error
self.assertIn('pum', checked, count=4) # Error

我对django assertContains有这种能力,但它断言你有反应。

1 个答案:

答案 0 :(得分:2)

如果您正在处理列表或元组,我的猜测是最惯用的方式

assert iterable.count(element)==number

这也适用于字符串,包括element不是单个字符 - 尽管可以说,这并不严格计算“在可迭代实例中出现的事情恰好是计数次数”,因为字符串的元素是字符。

在泛型迭代中,您可以使用列表推导或使用lambda的过滤器:

assert len([e for e in iterable if e==element]) == number
assert len(filter( lambda e:e==element, iterable)) == number

我认为第一种选择对大多数人来说是最清晰的。