2016-10-03 16 views
2

私はorg.scalatest.FunSpec with org.scalatest.Matchers試験を受験しています。スカラテスト:追加説明付きのマッチャーですか?

val tol = 1e-10 
val res = 1.000000000000001 
val ref = 1.000000000000000 
res should be (ref +- tol) 

が、私はそれらに関連するものの名​​前と値のコレクションを取得しますので、それはとても名をキー複数のケースのためのループで、もちろん私がテストしたコードの粒度を変更することはできませんありません。したがって、上記のテストでは、追加のコンテキストまたは追加の記述nameを適用して、それが適用される名前を反映する必要があります。彼らはすでに外にあるので、私はこの時点でitdescribeを使用することはできません

val name : String = ... 
res should be (ref +- tol) for name 

:私のようなものを必要としています。

答えて

3

それは本当にあなたが何をしようとしているかに依存し、そしておそらくのより完全な例を追加する必要があります何を達成しようとしていますが、ループ内でdescribeを使用することができます。

class TempTest extends FunSpec with Matchers { 

    describe("Some example test") { 

    (1 to 10).foreach { i => // your loop here 

     describe(s"Scenario $i") { 
     it("should be equal to itself") { 
      i shouldBe i 
     } 
     } 
    } 
    } 
} 

UPDATE:たとえばあなたは条件が失敗した場合、エラーに手がかり文字列を追加しますwithClueはマッチャー例えば:

withClue("Some clarifying message") { 
    i shouldBe 5 
} 

これまでより多くのコンテキストを追加するために使用することができます。

+0

良いですが、私はそれをすることはできません...私たちはクラスター内で遠隔計算されるテストを送信するスケート拡張子を持っています...このフレームワークすでにouttermost 'describe'を保持し、それを記述する 'it'の中に自動的に各テストをラップします。' resは(ref + tol) 'に' name'というテキストを付ける方法が必要です。条件...おそらく、唯一の方法は、潜在的な 'TestFailedException'を捕まえて豊かにすることです...もちろん、' assertResult'に移動することは別の可能性です。マッチする人をあきらめてください。 –

+0

@GiovanniAzuaはアップデートの例ですか? –

+0

これは、あなたはそれを釘付けにしました:) Scatatestは実際の生活のシナリオがほとんど明らかにならないように設計されています –

1

おそらく、GivenWhenThenを使用して、テストレポートにコンテキストを追加できます。私はあなたがループの中で、あなたの複数のテストをラップする方法を正確に確認していないが、ここでアイデアです:

import org.scalatest.{GivenWhenThen, WordSpec} 

/** 
    * Created by alex on 10/3/16. 
    */ 
class Temp extends WordSpec with GivenWhenThen{ 
    val names = List("Alex", "Dana") 
    for(name <- names)yield{ 
    "Reversing a name " + name + " two times" should { 
     "result in the same name" in{ 
     Given("name " + name) 
     When("reversed two times") 
     val reversed = name.reverse.reverse 
     Then("it should be the same") 
     assert(name === reversed) 
     } 
    } 
    } 
} 
+0

これは良いポインタですが、 'res should be(ref + tol)'によって生成された最良のコンテキストエラーをあきらめて、代わりにassertを使用しなければなりません。私はまた、 'GivenWhenThen'なしで直接アサートすることもできます –

+0

が合意した、すべての有効な点 –

関連する問題