2015-05-10 4 views
0

Я пробовал ScalaCheck и не смог понять, как построить первый пример в руководстве пользователя ScalaTest. Я почти уверен, что следующим должно предшествовать некоторый импорт и завернутый внутри класса, который простирается от некоторого класса библиотеки. page in the user's manual говорит «смешивать в» PropertyChecks, но это не дает пример соответствующего класса, чтобы смешать его в:Что отсутствует в этом примере 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 не делает, t помогите так много, как вы сказали, пожалуйста, если вы считаете, что это правильный ответ. заранее спасибо – anquegi

Смежные вопросы