1

什么是最惯用的(应该​​有一种——最好只有一种——明显的方式来做到这一点:))断言某些事情发生在可迭代实例中的确切次数是什么?我想实现下面描述的行为。

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 有这种能力,但它断言你有回应。

4

1 回答 1

2

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

assert iterable.count(element)==number

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

在通用迭代器上,您可以使用列表推导或带有 lambda 的过滤器:

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

我认为第一个选项对大多数人来说是最清楚的。

于 2013-10-17T09:24:53.153 回答