3

ほとんどの(すべて?)単体テストフレームワークに、目的のブール式で単一の関数(または言語構成)を使用する代わりに、さまざまなタイプのブール条件(たとえばassertEqualsassertNotEqualなど)を指定するための個別の関数を持つ大きなAPIがあるのはなぜですか?assert

4

3 に答える 3

8

単純なものは、主張された条件が偽と評価されたことを示す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ます。

于 2012-07-09T06:50:44.817 に答える
3

私は2つの理由を考えることができます:

  1. より宣言的です
  2. これにより、ライブラリはより詳細なアサーション失敗メッセージを自動的に提供できます。

宣言型とは、どのように実行したいかではなく、何を実行したいかを言うこと意味します。

オブジェクトの同等性と同様に十分にサポートされているものについて話す場合、違いはわずかですが、2つのコレクションを比較することを検討してください。あなたは、、を持っている可能性がありますassertIsSubsetOf-assertAreSameIncludingOrderassertAreSameButOrderIsIrrelevantはそれらの長くて複雑で簡単に台無しにされた実装よりもむしろそれらの英語の名前を読みたいです。

于 2012-07-09T06:49:04.010 に答える
1

気付くまで、私はこれに疑問を投げかけていました。2つの値をAPIに入れると、関数はアサートされない「値」を報告できます。それらが一致しないという事実ではなく、

何とか何とか何とか99は10003何とか何とか何とか等しくない

これは、テスト結果で間違っている問題の手がかりを与えます。コンピュータが提供できるどんな助けも歓迎されており、完全に極端なテストの精神にあります。

于 2012-07-09T06:51:32.203 に答える