最惯用的方法是什么(应该有一种——最好只有一种——明显的方法来做到这一点:))断言某件事在可迭代实例中恰好发生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 的能力,但它断言你有响应。
最佳答案
如果您正在处理列表或元组,我猜最惯用的方法是
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
我认为第一个选项对大多数人来说是最清楚的。
关于python - 带有计数的断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422651/