2016-03-22 7 views
1

Groovyの素晴らしいパワーアサート・ステートメントに似た結果が得られるかどうかは疑問です。Groovyに似たScalaの "Power assert"のようなものはありますか?

> assert ["1", '2']*.size() == [2, 3] 

Result: Assertion failed: 

assert ["1", '2']*.size() == [2, 3] 
        |  | 
        [1, 1] false 

は、私の知る限り、私が現在使用しているどちらの言語で、また scalatestでこのようなことのためのサポート、ありません。 しかし、誰かがそれを行ういくつかのサイドライブラリを提案することができますか?これはペットプロジェクトなので、実験的でうまくサポートされていないライブラリもうまくいきます。

EDIT:私はマッチャー(スケートのもの、またはプレーン - ジャワのハムクレストマッチャー)について知っています。私はそれらを冗長に書いており、その出力には詳細がないことがわかります。

上記の例は、エラーの検出を容易にする中間的な計算ステップを示しています。テストされたコードの何が間違っているかを詳細に示します。

私は、このような振る舞いを導入するには、実行時に式ASTに関する情報が必要になると思います。しかし、私は、この情報はマクロの使用法でコンパイル時に "焼く"ことができると考えています。

I.e.どこ - だから私はそれがすでに実装されます場合は見ていると、そうであればよ

if (!(a + b == c)) { 
    // detailed message is 
    // compute a 
    // compute b 
    // compute a + b 
    // compute c 
    // compute a + b == c 
    // Make it pretty. 

    throw new AssertionFailedException(prettyDetailedMessage) 
} 

:我々は表現assert a + b == cスカラ座(または私が探しているいくつかのマクロ拡張子)を持っている場合のようなものにそれを書き換えることができます。

答えて

4

assert((List("1", "2") map (_.length)) === List(2, 3)) 

これは、次のエラーメッセージを生成しますDiagrammedAssertionsを使用することができます。

これは、Spockのパワーアサーションのマクロベースの実装であるExpectyに基づいています。 https://github.com/pniederw/expecty

+0

恐ろしい!それが私が見てきたものです。ありがとうございました! – Seagull

2

Specs2のマッチャーエラーメッセージで良い仕事をする:

class Specs2Specification extends Specification { 
    "specs2 assertion" should { 
    "fail" in { 
     List("1", "2").map(_.length) must_=== List(2, 3) 
    } 
    } 
} 

実行出力:

[info] Specs2Specification 
[info] 
[info] specs2 assertion should 
[error] x fail 
[error] List(1, 1) is not equal to List(2, 3) 
[info] 
[error] Added (2) 
[error] 1 
[error] 1 
[info] 
[error] Missing (2) 
[error] 2 
[error] 3 

または

List("1", "2").map(_.length) must contain(exactly(2, 3)).inOrder 

[error] x fail 
[error] the values 2, 3 are not in order 
を生成

lots of themがあり、カスタムのものを作成できます。

0

あなたgroovyコードスニペットは、文字通り、次のscalaコード(すでにscalatestを使用していることを考えると)に変換されます。ScalaTestで

*** FAILED *** 
List(1, 1) did not equal List(1, 3) 
+0

Groovyは自動的に中間計算ステップを読み取り可能な形式で表示するということです。私はスカラ・マッチャーについて知っていますが、上記のコードはより読みやすく、より詳細な例外を生成します。 私はその事実を強調するために質問を改善します。 – Seagull

関連する問題