Репост из: Rust 视界
使用 Proptest 在 Rust 里基于属性测试(PBT)
proptest 是一个 类 Hypothesis 的 属性测试(PBT)框架。 PBT 是从函数式语言中发展起来的观念,而 Hypothesis 则是一款试图将其推广到所有语言的工具。http://hypothesis.works/
PBT(property-based-testing)介绍:
这有个详细的 Slides 介绍 PBT , https://www.slideshare.net/ScottWlaschin/an-introduction-to-property-based-testing
PBT 号称,「懒汉就不写测试,而是生成它们」。
通常的单元测试,我们都需要手工构造测试数据集。而 PBT 则让我们从属性的角度去思考测试,并提供框架来帮助我们生成测试数据集。
什么叫从属性角度思考?
假如 现在让你测试 加法(Add)。
单元测试的思路就是手工构造几个数据集:
1. 判断 2+2 = 4
2. 判断 1+3 = 4
3. 或者其他
但是,它的问题是,你没法写完全部的测试数据集。 当然,这只是个简单的示例,如果复杂的逻辑,你需要写的测试就很多了,总会有遗漏。
PBT的思路,是从属性出发,加法的属性是什么? 四则运算规律。
只需要验证: x + y = y + x 即可。
根据这个规则,PBT 测试框架来生成大量测试数据集,保证测试不会有遗漏。
而作为开发者,只需要思考清楚这个 属性 到底是什么,也有助于我们设计代码。
PBT方式的一个测试一般分为三个步骤:
1. 输入策略。就是上面的属性规则。
2. 结果检查。PBT 强迫你去深入理解逻辑需求,精心构造不同的解题路径,对结果进行检查。
3. 错误收敛。PBT框架会生成大量测试输入参数(数据集),所以会自动产生大量结果,框架会对这些结果进行错误收敛,生成尽可能小的异常参数集,方便开发人员查找问题。
这篇文章就是以一个简单的示例来展示如何使用 proptest 。
https://github.com/AltSysrq/proptest
https://blog.logrocket.com/property-based-testing-in-rust-with-proptest/
proptest 是一个 类 Hypothesis 的 属性测试(PBT)框架。 PBT 是从函数式语言中发展起来的观念,而 Hypothesis 则是一款试图将其推广到所有语言的工具。http://hypothesis.works/
PBT(property-based-testing)介绍:
这有个详细的 Slides 介绍 PBT , https://www.slideshare.net/ScottWlaschin/an-introduction-to-property-based-testing
PBT 号称,「懒汉就不写测试,而是生成它们」。
通常的单元测试,我们都需要手工构造测试数据集。而 PBT 则让我们从属性的角度去思考测试,并提供框架来帮助我们生成测试数据集。
什么叫从属性角度思考?
假如 现在让你测试 加法(Add)。
单元测试的思路就是手工构造几个数据集:
1. 判断 2+2 = 4
2. 判断 1+3 = 4
3. 或者其他
但是,它的问题是,你没法写完全部的测试数据集。 当然,这只是个简单的示例,如果复杂的逻辑,你需要写的测试就很多了,总会有遗漏。
PBT的思路,是从属性出发,加法的属性是什么? 四则运算规律。
只需要验证: x + y = y + x 即可。
根据这个规则,PBT 测试框架来生成大量测试数据集,保证测试不会有遗漏。
而作为开发者,只需要思考清楚这个 属性 到底是什么,也有助于我们设计代码。
PBT方式的一个测试一般分为三个步骤:
1. 输入策略。就是上面的属性规则。
2. 结果检查。PBT 强迫你去深入理解逻辑需求,精心构造不同的解题路径,对结果进行检查。
3. 错误收敛。PBT框架会生成大量测试输入参数(数据集),所以会自动产生大量结果,框架会对这些结果进行错误收敛,生成尽可能小的异常参数集,方便开发人员查找问题。
这篇文章就是以一个简单的示例来展示如何使用 proptest 。
https://github.com/AltSysrq/proptest
https://blog.logrocket.com/property-based-testing-in-rust-with-proptest/