python - 带有计数的断言

标签 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 的能力,但它断言你有响应。

最佳答案

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

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/

相关文章:

web-services - 自动化 Web 服务测试

c# - 关于 C# 的 TDD 和 Mocks 处理的书籍

c# - 如何使用 log4net 进行 TDD?

python - 用 python 列出网络共享

Python OpenCV 在 Canny 边缘检测后删除最外层边缘

python - Python中的空元组有什么用途吗?

python - 使用 easy_thumbnails_ffmpeg

c# - 从外部运行 Visual Studio 测试项目

c++ - 我应该如何将包装 API 的对象传递给使用该 API 的类?

python - 如何在Python中获得100%的代码覆盖率?