python - 基于属性的测试和突变测试有什么区别?

标签 python testing mutation-testing hypothesis-test property-based-testing

这个问题的背景是 Python。

假设检验库(即基于属性的检验): https://hypothesis.readthedocs.io/en/latest/

突变测试库: https://github.com/sixty-north/cosmic-ray

最佳答案

这些是非常不同的野兽,但都可以提高测试的值(value)和质量。这两种工具都有助于并使“我的代码覆盖率为 N%”的声明更有意义。


Hypothesis将帮助您在定义的范围内为被测函数生成各种测试输入。

通常,当您需要测试一个函数时,您会提供多个示例值,试图涵盖代码覆盖率报告驱动的所有用例和边缘情况 - 这就是所谓的“基于示例的测试”。另一方面,假设实现基于属性的测试,生成一大堆不同的输入和输入组合,有助于捕获不同的常见错误,例如被零除、None、0、差一错误等并帮助找到隐藏的错误。

Mutation testing就是在针对修改后的代码版本执行测试时,即时更改被测代码。

这确实有助于了解您的测试是否真正测试了它们应该测试的内容,从而了解您的测试的值(value)。如果您已经拥有丰富的测试代码库和良好的代码覆盖率,那么变异测试将会大放异彩。


帮助我理解这些概念的是这些 Python 播客:

关于python - 基于属性的测试和突变测试有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38704037/

相关文章:

testing - 如何在 xunit.runner.console 中使用交集 (AND) 特征过滤器

c++ - 用于处理带有数字输出的 C++ 单元测试的框架/工具

ruby - Watir 尝试匹配版权声明时出错

java - 是否可以将 Pitest 配置为存在依赖于 Maven 的 jar 文件而不是 Maven 模块本身的突变测试代码?

python - 根据多个条件计算列

python - 来自 csv 的 Pandas Dataframe 显示不正确

python3 使用自定义属性重新引发异常?

python - scrapy爬虫的请求被阻塞。使用requests库的请求可以正常访问。什么原因?

java - 突变杀伤

unit-testing - 存在哪些突变测试框架?