2015-05-10 63 views
0

我正在嘗試ScalaCheck,一直未能弄清楚如何在ScalaTest用戶手冊上構建第一個示例。我敢肯定,下面的代碼需要先導入一些導入,然後將其封裝在一個擴展自某些庫類的類中。該page in the user's manualPropertyChecks爲「在組合」,但它並沒有給予適當的類的實例給它混入:ScalaTest/ScalaCheck示例中缺少什麼?

forAll { (n: Int, d: Int) => 

    whenever (d != 0 && d != Integer.MIN_VALUE 
     && n != Integer.MIN_VALUE) { 

    val f = new Fraction(n, d) 

    if (n < 0 && d < 0 || n > 0 && d > 0) 
     f.numer should be > 0 
    else if (n != 0) 
     f.numer should be < 0 
    else 
     f.numer should be === 0 

    f.denom should be > 0 
    } 
} 

我一直在嘗試不同的組合,但最好的結果,我已經得到了到目前爲止編譯錯誤是這樣的:

[info] Compiling 1 Scala source to .../target/scala-2.11/test-classes... 
[error] .../src/test/scala/TestFraction.scala:14: value should is not a member of Int 
[error]   f.numer should be > 0 
[error]    ^

什麼是測試,導入和所有的完整源文件?

回答

1

如果選中斯卡拉測試GitHub的倉庫在這裏,你可以在這裏找到一些額外的代碼

github source scalatest

爲源本是進口結構

import org.scalatest.{Matchers, FlatSpec} 
import org.scalatest.prop.PropertyChecks 

class Fraction(n: Int, d: Int) { 

    require(d != 0) 
    require(d != Integer.MIN_VALUE) 
    require(n != Integer.MIN_VALUE) 

    val numer = if (d < 0) -1 * n else n 
    val denom = d.abs 

    override def toString = numer + "/" + denom 
} 

class PropertySpec extends FlatSpec with PropertyChecks with Matchers { 
    forAll { (n: Int, d: Int) => 

    whenever(d != 0 && d != Integer.MIN_VALUE 
     && n != Integer.MIN_VALUE) { 

     val f = new Fraction(n, d) 

     if (n < 0 && d < 0 || n > 0 && d > 0) 
     f.numer should be > 0 
     else if (n != 0) 
     f.numer should be < 0 
     else 
     f.numer should be === 0 

     f.denom should be > 0 
    } 
    } 

    val invalidCombos = 
    Table(
     ("n", "d"), 
     (Integer.MIN_VALUE, Integer.MIN_VALUE), 
     (1, Integer.MIN_VALUE), 
     (Integer.MIN_VALUE, 1), 
     (Integer.MIN_VALUE, 0), 
     (1, 0) 
    ) 

    forAll(invalidCombos) { (n: Int, d: Int) => 
    evaluating { 
     new Fraction(n, d) 
    } should produce[IllegalArgumentException] 
    } 
} 
+0

這是一個工作[ SSCCE(http://sscce.org/)!非常感激。你可能救了我無數個小時的猜測,試圖填補遺漏的細節。 (正如你可能注意到的,github上的源碼省略了相同的細節。) –

+0

很高興幫助你,對於他們沒有解釋它的樣本來說是這樣,有時候很難找到導入,而且github也沒有。如果你認爲這是一個有效的答案,那麼你就說過了。提前致謝 – anquegi