簡體   English   中英

如何在ScalaTest中使用ScalaCheck的收集和分類?

[英]How to use ScalaCheck's collect and classify in ScalaTest?

即使測試成功運行,以下使用Prop.collect((a, b))也不會按預期打印統計信息。

import org.scalacheck.Prop
import org.scalatest.{GivenWhenThen, PropSpec}
import org.scalatest.prop.{Checkers, GeneratorDrivenPropertyChecks}

import org.scalacheck.Prop.AnyOperators

class AccountSpecWithMarkup extends PropSpec with Checkers with GeneratorDrivenPropertyChecks {

  property("max") {
    check({
      (a:Int, b:Int) => {

        Prop.collect((a, b)) {

          a != b || a == b
        }
      }
    })
  }
}

一個古老的問題,可能早已回答或解決,但由於我是一個試圖找出繩索的scalacheck新手,我會自願回應。

不確定為什么你的例子不能按預期工作,但這個更簡單的測試可以解決問題(在Scalacheck 1.14中):

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

object AccountSpecWithMarkup extends Properties("AccountSpecWithMarkup") {

  property("max") = forAll { (a: Int, b: Int) =>
    collect((a, b)) {
      a != b || a == b
    }
  }
}

請注意,該測試現在是一個擴展Propertiesobject Properties.property val的類型為PropertySpecifier ,它封裝了可變狀態( Props集合)並具有update方法。 這條線

property("max") = forAll { ... }

是語法糖

property.update("max", forAll{ ... })

其中forAll生成Prop類型的值。 累積此Prop值以供稍后使用隱式Arbitrary[Int]生成器進行評估,以生成ab測試值,這些測試值由collect以便在測試結果中進行報告。

這是成功試運行的前幾行

+ AccountsSpectWithMarkup.max: OK, passed 100 tests.
> Collected test data: 
4% (-2147483648,2147483647)
2% (1,2147483647)
2% (-1,-1)
2% (-1,0)
1% (-1,-1128775662)
1% (501893471,-2147483648)
1% (0,0)
1% (1529964222,-1507103054)
1% (36753817,-2147483648)
1% (2147483647,535423354

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM