2017-01-27 3 views
2

カスタムメッセージを印刷するためにspecs2を取得できないようです。可変仕様のカスタムメッセージを使用するにはどうすればよいですか?

import org.junit.runner.RunWith 
import org.specs2.mutable.Specification 
import org.specs2.runner.JUnitRunner 

@RunWith(classOf[JUnitRunner]) 
class MessageSpecs extends Specification { 
    "This" should { 
    "fail" in { 
     true.must(beFalse).setMessage("this should PRINT") 
     //true.must(beFalse.setMessage("this should PRINT")) // or maybe this? no. 
     //true.must(beFalse).updateMessage(_ => "this should PRINT") // not this either 
    } 
    } 
} 

私は単純にデフォルト値のエラーメッセージ "the value is true"を取得します。これは仕様です.2 3.8.5 JUnitRunnerをmaven経由で使用しています。私はまだsbtプロジェクトでこれを試していません。私が見つけることができるドキュメントは、これがうまくいくはずであることを示唆している

---編集---

ソートの回避策:true.aka("this should PRINT").must(beFalse) // works

ので、複雑な失敗を記述するために実際に使用されるが、少なくとも、それは印刷したときに醜いビットを出力します障害をより簡単に理解するために必要な追加コンテキストを追加できます。

答えて

3

ここでの主な問題は、変更可能な仕様を使用していることにあります。変更可能な仕様では、結果が正しくないときに例外がスローされます。その場合、別のメッセージを設定しようとする前に、テストは失敗します(元のメッセージとともに)。

あなたは2つのオプションがあります:

  • は、整合自体

    false must beTrue.setMessage("ko") 
    
  • にメッセージを設定org.specs2.execute.AsResult (これは例外をキャッチ)

    AsResult(false must beTrue).updateMessage("ko") 
    
で結果をキャプチャ

MatchResult(一致するエンティティがある)とResult(より一般的な概念です)のメッセージの設定によって、メッセージを設定/更新するAPIが少し異なります。前者はsetMessageを使用し、後者はupdateMessageを使用します。

そして、記録のために、与えられた障害のために多くの情報を追加するための他の方法があります:あなたが記述するための文を使用し

  • に気づいたように、実際の値を記述するための

    • 使用akaフル期待

      "Values are correct" ==> { 
          values must beCorrect 
      } 
      
    • は新しいマッチャーを作成

      def myMatcher: Matcher[Int] = (i: Int) => 
          (test(i), s"what's wrong with $i") 
      
  • +0

    ありがとう@Eric。私は確かに私がこれを上記に減らすようになったbeFalseよりも複雑なマッチャーでこれを見ました。私がそれらをもう一度見たら、私はここにメモを入れます。私は仕様を再構成して以来、より信頼できるように「aka」を使用しています。 –

    +0

    Scott、私は答えを更新しました。 – Eric

    関連する問題