2017-01-25 5 views
1

ScalaCheckでScalaTestを使用してプロパティベースのテストを実行しようとしています。今、私が見ている私は、何度もPropSpec1でテストを実行し続ける場合、時には第二の試験は合格ということですが、それが失敗したほとんどの時間ScalaCheckは失敗していませんか?

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


object Calc { 
    def add(a:Int, b:Int) = a+b 

    def div(a:Int, b:Int) = a/b 
} 


class PropSpec1 extends FlatSpec with Matchers with PropertyChecks { 
    behavior of Calc.getClass.getName 


    it should "add integers" in { 
    forAll { (a: Int, b: Int) => 
     Calc.add(a, b) shouldEqual a + b 
    } 
    } 

    it should "divide integers" in { 
    forAll { 
     (a:Int, b:Int) => Calc.div(a, b) shouldEqual a/b 
    } 
    } 
} 

:私は、以下に概説のテストを持っています。さて、もし0がbのためにテストされなければ、明らかにそれは合格しますが、私はそれが常に試みることの1つだと思っていました。私はsbtクリーンテストを繰り返し実行すると同じ動作をします。時々両方のテストが合格する。

プロパティベースのテストではこれは正常ですか、(自分の発電機を常に提供しているように)必要なことはありますか?

答えて

0

が、私はそれはそれは常に

仮定が諸悪の根源ですしようとするだろうものの一つだと思っていると思います。

基本的に、Scalacheckに生成させていただいたのは、Intのサンプルです。有効なIntは、約40億の値の1つになります。

あなたは(例外がスローされます)0は、この機能の障害を小文字になることを知っているので、あなたは、単にそのようにそれをフィルタリングすることができます:あなたはそこにwhenever機能のためscaladocをチェックする場合は

forAll { (a:Int, b:Int) => 
    whenever(a != 0 && b != 0) { 
    Calc.div(a, b) mustEqual a/b 
    } 
} 

PSあなたがここで尋ねたのと似た例です。

+0

ありがとうございました...私はいつでも知っています。私はそれがエッジケースを試してみることにもっと関心を持っている、あるいは少なくとも0を試して覚えておくように言いました(これは意味をなさないが、より一般的な問題です)。それには何かありますか? – ashic

+0

私の知る限り、カスタムジェネレータを用意する必要があります。他の方法があるかもしれません。多分誰かがチャイムに入ります。 –

関連する問題