2016-07-09 37 views
0

官方scalacheck文檔給出了下面的例子:爲什麼Scalacheck Prop值沒有得到評估?

property("stringLength") = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
    } 

我看,這也可以寫成:

val stringLength = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
    } 

如何運行的測試代碼的第二種形式?當我執行sbt test時,第二個版本沒有任何反應。

+0

這原本是下http://stackoverflow.com/questions/35886206/no-implicit-view-available-from-anyval-org-scalacheck-prop-error問-property/38283963但我在這裏分出第二個問題,因爲它與第一個問題沒有直接關係。 – Pavel

回答

0

的問題是,第二個版本是簡單地宣佈擁有對有關財產的引用的VAL但是這還不足以讓scalacheck對其進行評估。這種聲明屬性的風格是有用的,例如,如果你想編寫一個新的屬性超出其他基本屬性。您可以直接查看或指定它的特殊屬性setter爲了得到它被評爲試運行的一部分:

val stringLength = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
} 

// invoke directly: 
stringLength.check 

// alternatively, just declare it the usual way 
property("stringLength") = stringLength 

這不是本身,它的方式是爲了非常有用使用也許是這樣的:

property("composite") = Prop.all(stringLength, prop2, prop3, ...)