亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何報告 scalacheck.P??rop.forAll 屬性測試的所有測試用例輸入?

如何報告 scalacheck.P??rop.forAll 屬性測試的所有測試用例輸入?

呼喚遠方 2021-06-08 17:56:53
在使用 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 給出的所有隨機測試輸入報告給相應的屬性測試?
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

使用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 中的任何一個,則測試可能會失敗,因為值 -1、0 和 1 是由Scalacheck's隱式arbitrary[Int]生成器不成比例地頻繁生成的。


查看完整回答
反對 回復 2021-06-23
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號