Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何通过基于属性的测试生成有意义的示例来测试n元属性?_Unit Testing_Testing_Quickcheck_Property Based Testing - Fatal编程技术网

Unit testing 如何通过基于属性的测试生成有意义的示例来测试n元属性?

Unit testing 如何通过基于属性的测试生成有意义的示例来测试n元属性?,unit-testing,testing,quickcheck,property-based-testing,Unit Testing,Testing,Quickcheck,Property Based Testing,在基于属性的测试设置(如Haskell的自定义数据结构快速检查)中,如何为关系的n元属性(如传递性或对称性)生成测试数据?我认为,实现语言并不重要 这里是一个天真的C++例子,(因为我现在手头有这个工具): 在这种幼稚的情况下,该工具不太可能生成许多前提(a==b)实际成立的示例,因此您最终会在无意义的测试上浪费大量精力。对于三元关系,如及物性,情况更糟 是否有解决这些问题的通用技术?我是否需要生成相等的对(对于“equals”的一些建设性定义)?那么订单之类的东西呢?我要做的是提高价值冲突的概

在基于属性的测试设置(如Haskell的自定义数据结构快速检查)中,如何为关系的n元属性(如传递性或对称性)生成测试数据?我认为,实现语言并不重要

这里是一个天真的C++例子,(因为我现在手头有这个工具):

在这种幼稚的情况下,该工具不太可能生成许多前提(
a==b
)实际成立的示例,因此您最终会在无意义的测试上浪费大量精力。对于三元关系,如及物性,情况更糟


是否有解决这些问题的通用技术?我是否需要生成相等的对(对于“equals”的一些建设性定义)?那么订单之类的东西呢?

我要做的是提高价值冲突的概率,将价值生成限制在较小的范围内,有时将其与更通用的生成器结合起来

考虑以下发电机,其改编自:

@提供
任意键(){
返回任意(
介于(-25,25)之间的任意数.integers(),
任意数。整数()
);
}
生成将首先以相等的概率在任何整数和介于-25和+25之间的整数之间进行选择。因此,大约每100个值都是重复的

在更困难的情况下,我甚至可能有一个生成器,可以从一小组预定义的值中进行选择

更新:jqwik的最新版本允许以给定的概率显式生成副本: 不过,我不知道QuickCheck或任何其他PBT库是否具有类似的功能

  rc::check("Double equality is symmetric.", [](double a, double b) {
     RC_ASSERT(!(a == b) || (b == a)); // a == b ==> b == a
  });
@Provide
Arbitrary<Integer> keys() {
    return Arbitraries.oneOf(
            Arbitraries.integers().between(-25, 25),
            Arbitraries.integers()
    );
}