簡體   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