繁体   English   中英

如何报告scalacheck.P​​rop.forAll属性测试的所有测试用例输入?

[英]How to report all test case input for scalacheck.Prop.forAll property test?

在使用scalacheck时,如果我们使用forAll测试任何属性,那么我们只会报告失败的测试输入而没有通过测试输入。

scala> import org.scalacheck.Prop.forAll 
scala> val propConcatLists = forAll { (l1: List[Int], l2: List[Int]) =>
                                        l1.size + l2.size == (l1 ::: l2).size }
scala> propConcatLists.check
 + OK, passed 100 tests.

有没有办法报告由forAll给出的所有随机测试输入到各自的属性测试?

使用collect

这个玩具示例说明了它的用途:

import org.scalacheck.Prop.{forAll,collect}

val q = forAll { (m: Int, n: Int) => collect(m, n, m+n) { m + n != 37 } }
q.check

上面的代码产生了这个输出

 + OK, passed 100 tests. > Collected test data: 2% (0,-1,-1) 2% (-1,0,-1) 2% (-1,2147483647,2147483646) <snip> 1% (1,0,1) 1% (-1199549050,-1564573392,1530844854) 1% (2147483647,0,2147483647) 1% (-1,-2147483648,2147483647) 

免责声明 :这个玩具示例显然不是一个设计良好的属性测试。 虽然这肯定是不正确的,中任意一对的Ints 从未总计为37,它通过ScalaCheck因为两个任意的机会Ints所产生ScalaCheck的总和为37是相当不错的小。 但是如果将37更改为-2,-1,0,1或2中的任何一个,则测试可能会失败,因为Scalacheck's隐式arbitrary[Int]生成器会不成比例地生成值-1,0和1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM