如何在基于 属性 的测试中保证极端情况
How to guarantee corner cases in property based testing
最近,在阅读有关基于 属性 的测试的想法时,我感到非常兴奋。
但我有 1 个问题,我仍然无法在任何地方找到答案:
基于 属性 的测试如何确保每次都会测试极端情况?
更具体地说,假设我正在使用 ScalaCheck 来测试我的除法函数:
def divide(a: Int, b: Int): Int
由于测试用例是随机生成的,我如何确定ScalaCheck每次都会检查b = 0
的情况?
特例往往是它们自己的属性。如果您尝试编写一个涵盖 b = any integer
的案例,那么您的所有属性都将在一个大而复杂的测试中结束。但是您可以将参数 space 拆分为多个块,例如:
- b = 正整数
- b = 负整数
- b = 0
并分别检查。
一些 PBT 工具总是会在生成随机案例之前注入极端案例。
例如,jqwik(对于 Java)会在任何随机值之前尝试 0、1、-1、Integer.MIN…VALUE 和 Integer.MAX…VALUE。
最近,在阅读有关基于 属性 的测试的想法时,我感到非常兴奋。
但我有 1 个问题,我仍然无法在任何地方找到答案:
基于 属性 的测试如何确保每次都会测试极端情况?
更具体地说,假设我正在使用 ScalaCheck 来测试我的除法函数:
def divide(a: Int, b: Int): Int
由于测试用例是随机生成的,我如何确定ScalaCheck每次都会检查b = 0
的情况?
特例往往是它们自己的属性。如果您尝试编写一个涵盖 b = any integer
的案例,那么您的所有属性都将在一个大而复杂的测试中结束。但是您可以将参数 space 拆分为多个块,例如:
- b = 正整数
- b = 负整数
- b = 0
并分别检查。
一些 PBT 工具总是会在生成随机案例之前注入极端案例。
例如,jqwik(对于 Java)会在任何随机值之前尝试 0、1、-1、Integer.MIN…VALUE 和 Integer.MAX…VALUE。