ほとんどの(すべて?)単体テストフレームワークに、目的のブール式で単一の関数(または言語構成)を使用する代わりに、さまざまなタイプのブール条件(たとえばassertEquals
、assertNotEqual
など)を指定するための個別の関数を持つ大きなAPIがあるのはなぜですか?assert
3 に答える
単純なものは、主張された条件が偽と評価されたことを示すassert
だけをスローします。AssertionError
assert "foo".equals("boo")
java.lang.AssertionError: assertion failed
(参照比較のため、言うまでもなくassert string1 == string2
正しくありません)
a
両方を渡すことによりb
、ライブラリはそれらをエラーメッセージに含めることができます。ここで:FESTアサーション:
assertThat("foo").isEqualTo("boo");
//throws:
Exception in thread "main" org.junit.ComparisonFailure:
expected:<'[b]oo'> but was:<'[f]oo'>
一部の言語はより強力であることに注意してください。
Groovyの場合(例:Groovy 1.7 Power Assert):
a = 10
b = 9
assert 91 == a * b
収量:
Assertion failed:
assert 91 == a * b
| | | |
| 10| 9
| 90
false
at ConsoleScript2.run(ConsoleScript2:4)
Scala(ScalaTest)には特別な===
演算子があります:
assert(1 === 2)
を生成し1 did not equal 2
ます。
私は2つの理由を考えることができます:
- より宣言的です
- これにより、ライブラリはより詳細なアサーション失敗メッセージを自動的に提供できます。
宣言型とは、どのように実行したいかではなく、何を実行したいかを言うことを意味します。
オブジェクトの同等性と同様に十分にサポートされているものについて話す場合、違いはわずかですが、2つのコレクションを比較することを検討してください。あなたは、、を持っている可能性がありますassertIsSubsetOf
-assertAreSameIncludingOrder
私assertAreSameButOrderIsIrrelevant
はそれらの長くて複雑で簡単に台無しにされた実装よりもむしろそれらの英語の名前を読みたいです。
気付くまで、私はこれに疑問を投げかけていました。2つの値をAPIに入れると、関数はアサートされない「値」を報告できます。それらが一致しないという事実ではなく、
何とか何とか何とか99は10003何とか何とか何とか等しくない
これは、テスト結果で間違っている問題の手がかりを与えます。コンピュータが提供できるどんな助けも歓迎されており、完全に極端なテストの精神にあります。