详细内容或原文请订阅后点击阅览
让假设在用户之前破解您的 Python 代码
基于属性的测试,可发现您不知道存在的错误。让假设在您的用户之前打破您的 Python 代码一文首先出现在 Towards Data Science 上。
来源:走向数据科学,你应该认真地测试你的代码。您可以使用 pytest、模拟依赖项编写单元测试,并努力实现高代码覆盖率。不过,如果您像我一样,在完成测试套件的编码后,您的脑海中可能会萦绕着一个挥之不去的问题。
“我考虑过所有的边缘情况吗?”
您可以使用正数、负数、零和空字符串来测试您的输入。但是奇怪的 Unicode 字符呢?或者 NaN 或无穷大的浮点数?空字符串列表或复杂嵌套 JSON 的列表怎么样?可能的输入空间是巨大的,很难想象你的代码可能会以多种不同的方式被破坏,特别是当你面临一定的时间压力时。
基于属性的测试将这种负担从您身上转移到了工具上。你不用手工挑选例子,而是陈述一个属性 ——一个对所有输入都必须成立的事实。然后假设库生成输入;如果需要的话,可以有数百个,寻找反例,并且 ——如果找到一个—— 将其缩小到最简单的失败案例。
你 属性 全部 生成 缩小在本文中,我将向您介绍基于属性的测试的强大概念及其在 Hypothesis 中的实现。我们将超越简单的函数,并向您展示如何测试复杂的数据结构和有状态的类,以及如何微调假设以实现稳健且高效的测试。
那么,基于属性的测试到底是什么?
基于属性的测试是一种方法,您无需为特定的硬编码示例编写测试,而是定义代码的一般“属性”或“不变量”。属性是关于代码行为的高级声明,应适用于所有有效输入。然后,您使用一个测试框架,例如“假设”,它会智能地生成各种输入,并尝试找到一个“反例” ——您所陈述的属性为假的特定输入。
基于属性的假设测试的一些关键方面包括:
生成测试。 n 。