1

JUnitのバックグラウンドから来て、spockDテストのすべてのテキストのポイントを本当に理解していません.テストからの出力には表示されないからです.

たとえば、フィールド Double foo に制約 foo max:5, nullable:false がある場合

そして、私は次のようなテストを書きます:

void "test constraints" {
   when: "foo set to > max"
     foo=6D
   then: "max validation fails"
     !foo.validate()
   when: "foo is null
     foo=null
   then: "null validation fails"
     !foo.validate()
}

テストはソースで十分に文書化されていますが、検証が失敗した場合、エラー出力は、テストを明確にするために行ったすべての追加の入力を利用していません。

私が得るのは

Failure:  |
test constraints(com.grapevine.FooSpec)
 |
Condition not satisfied:
f.validate()
| |
| false    

しかし、このレポートからは、null 制約または最大制約の検証に失敗したかどうかを判断できません。次に、テスト ソースで失敗した行番号を確認する必要があります。

少なくともJUnitでできること

foo=60D;
assertFalse("contraints failed to block foo>max", f.validate());
foo=null;
assertFalse("contraints failed to block foo=null", f.validate());

そして、失敗レポートから有益な情報を得ることができました。これは、より簡潔で、より有益なテスト失敗レポートを提供するようです。

このような when 句と then 句のすべてのタイピングを利用して、Spec からより堅牢なエラー レポートを取得する方法はありますか? これらの「いつ」と「その後」のテキスト記述子は、内部ソース ドキュメントとしてのみ機能しますか、それともどこかで使用されますか?

4

1 に答える 1

5

ブロックの説明は、主に高レベルのテスト用です。単体テストではめったに使用されません。とはいえ、Spock にはサードパーティのレポート拡張機能がいくつかあります。

これらの少なくともいくつかは、ブロックの説明も出力します。さらに、Spock の次のバージョンでは、すぐに使用できる高度なレポートを出荷する予定です。

1 つのテストで 2 つの無関係なケースをチェックする (Spock/JUnit の例のように) のではなく、通常、各ケースにわかりやすい名前を付けた個別のテストを作成することをお勧めします。これには、Spock のデータ駆動型テストが役立ちます。

Spock 条件 (例: assert 1 == 2, "not quite") の説明を追加することは可能ですが、ほとんどの場合、デフォルトの「power assert」出力を好みます。

タイトルの質問に答えるために、適切に作成された Spock テストは通常​​、JUnit テストよりもはるかに簡潔です。

于 2014-12-02T23:04:17.570 に答える