我是Scala,Scalacheck和specs2的新手,如果問題很明顯的話,我會很滿意。我試圖尋找一個這樣的例子,但沒有找到任何相關的東西。高階Scalacheck屬性
基本上我正在尋找一種方法來創建一個測試類,使用specs2來定義一個Prop.forAll屬性,該屬性接收另一個scalacheck屬性(如果這是可能的話,不需要),一個生成器(Gen [A])和一個文件路徑並檢查該屬性是否通過確定的一組樣本(來自發生器)並將錯誤保存在文件中。
無論如何要實現這一點?說到在一個通用的方式
我是Scala,Scalacheck和specs2的新手,如果問題很明顯的話,我會很滿意。我試圖尋找一個這樣的例子,但沒有找到任何相關的東西。高階Scalacheck屬性
基本上我正在尋找一種方法來創建一個測試類,使用specs2來定義一個Prop.forAll屬性,該屬性接收另一個scalacheck屬性(如果這是可能的話,不需要),一個生成器(Gen [A])和一個文件路徑並檢查該屬性是否通過確定的一組樣本(來自發生器)並將錯誤保存在文件中。
無論如何要實現這一點?說到在一個通用的方式
我提出這樣的:
import org.specs2._
import org.specs2.execute._
import org.scalacheck._
class TestSpec extends Specification with ScalaCheck { def is = s2"""
Test my RDD $test
"""
def test = {
// get/create a generator
val gen: Gen[Row] = ???
// run the property
property(gen, "prop1.txt") { r: Row =>
r.values must haveSize(3)
}
}
def property[A, R : AsResult](g: Gen[A], path: String)(prop: A => R): Result =
saveResult(path)(Prop.forAll(g)(prop))
def saveResult[R : AsResult](path: String)(r: R): Result = {
val result = AsResult(r)
if (!result.isSuccess) writeToFile(result, path)
result
}
def writeToFile(result: Result, path: String) = ???
case class Row(values: List[Int])
}
你好!嘗試在調用saveResult時將屬性函數應用到屬性函數中,您可以解釋下面這段代碼:'saveResult(path)(Prop.forAll(g)(prop))'如何將2個參數傳遞到forAll道具的圓括號中。我得到一個單位不採取任何參數錯誤:(但總體而言你的例子看起來很有前途,謝謝你! – mtelloz
對不起,我編輯了代碼,現在編譯。 – Eric
它的工作!謝謝!我想問你一些東西否則,如果你讓我,在我的情況下定義gen時,我從一個從avro文件創建的RDD中包裝一行,但是因爲我在試圖定義測試函數中的複雜屬性時使用泛型實現它,所以我無法做到所以既然它只是返回一個Row,我應該像創建一個case類一樣創建一個case類,並根據avro中的模式定義參數並將它投射出去?順便謝謝你花時間回覆我的問題!最好的問候。 – mtelloz
如何是你的財產的接收和其他財產+發電機+文件路徑的「託」?特別是當你進入Prop.forAll((p:Prop,g:Gen [A],f:File)=> ...)時,你必須有一個任意的p,g和f。 – Eric
Gen [A]從RDDGen類讀取一個RDD並返回包裝爲Gen [A]的行,該路徑將在測試類中給出。主要目標是:給P一個屬性檢查它是否失敗了,並保存在文件中。 – mtelloz