2017-04-20 4 views
0

Listsの外部ScalacheckジェネレータとGen.oneOf(List[T])を使用しています。空の値のプレースホルダーを返すことは、時には便利だと思います。現在、リストには値が設定されています。これについてどうすればいいですか?リストの最後に空のタイプを追加しようとしますか?もしそうなら、どのように私はそれについて行くのですか?もしそうでなければ、どうすれば私の発電機に空の値を加えることができますか?それは簡単なようですが、私は今、それを理解することに問題があります。Scalatestでプロパティチェックが失敗する

import org.scalatest.FlatSpec 
import org.scalacheck.Gen 
import org.scalacheck.Prop.exists 
import org.scalatest.prop.PropertyChecks 

class EventFieldGeneratorTest extends FlatSpec with PropertyChecks { 
    behavior of "Gen.option" 
    it should "occasionally return None" in { 
    val colors = Gen.oneOf("Blue", "Red", "Green", "Yellow") 
    val opt = Gen.option(colors) 
    val list = Gen.listOfN(20, opt) 
    val p1 = exists(list)(_ == None) 
    p1.check 
    } 
} 

私のテストがなぜ諦めているのですか?

Testing started at 10:31 AM ... ! Gave up after only 0 passed tests. 501 tests were discarded. 

Process finished with exit code 0 

これをScalaTestの失敗した結果としてマークするにはどうすればよいですか? Flatspecを使用するのは悪い考えですか?

たぶん私は...

check以外のものを使用する必要がありますここで私はそれをソートするために使用さドキュメントがあります。私は、オプションの値を使用してリストを使用しようと欠陥のあるものはないと思う

http://www.scalatest.org/user_guide/writing_scalacheck_style_properties

答えて

1

:Scalatestページで。あなたが問題を起こしているいくつかの問題があります。

Scalatestフレームワークを使用している場合、Scalatestインフラストラクチャを使用してScalacheckを使用する必要があります。したがって、Scalatestマッチャーを使用し、Scalatest風味のプロパティ(forAllを使用)を記述する必要がありますが、Scalacheckのジェネレーターはそのまま使用します。

何らかの理由で、リスト間の型推論とOptionタイプが問題を引き起こしています。あなたがshouldBeマッチャー、

x shouldBe(None) 

を使用する場合は、Scalatestから関連するランタイムエラーが発生します:

[info] - should occasionally return None *** FAILED *** 
[info] TestFailedException was thrown during property evaluation. 
[info]  Message: List() was not equal to None 
[info]  Location: (GenTest.scala:13) 
[info]  Occurred when passed generated values (
[info]  arg0 = List() // 5 shrinks 
[info] ) 
[info] Run completed in 1 second, 621 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 0, failed 1, canceled 0, ignored 0, pending 0 

あなたはOptionタイプのリストに一致するべきではありません。

Scalatest上
[info] EventFieldGeneratorTest: 
[info] Gen.option 
[info] - should occasionally return None 
[info] ScalaTest 
[info] Run completed in 1 second, 9 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 
[info] All tests passed. 
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 

詳細は

http://www.scalatest.org/user_guide/using_matchers

をマッチャー:あなたは should contain

は、これはあなたに成功したプロパティのチェックを与える
import org.scalatest.FlatSpec 
import org.scalatest.Matchers 
import org.scalacheck.Gen 
import org.scalatest.prop.PropertyChecks 

class EventFieldGeneratorTest extends FlatSpec with Matchers with PropertyChecks { 
    behavior of "Gen.option" 
    it should "occasionally return None" in { 
    val colors = Gen.oneOf("Blue","Red","Green","Yellow") 
    val opt = Gen.option(colors) 
    val list = Gen.listOfN(20,opt) 
    forAll(list) { (xs: List[Option[String]]) => 
     xs should contain (None) 
    } 
    } 
} 

Scalatest "コンテナ" マッチャとのマッチングをする必要があります

関連する問題