0

たとえば、JUnitで動的オブジェクトタイプを比較するにはどうすればよいですか?-

while (objList.hasNext()) {
      Object<String> obj = objList.next();
      Assert.assertEquals("expected", obj); 
}

このシナリオでは、1つのオカレンスが失敗すると、テスト全体が失敗します。アサートテストの前に条件を使用して、期待される文字列を特定するのは良いアプローチですか?

このような:

while (objList.hasNext()) {
      Object<String> obj = objList.next();
      if (obj.equals("expected")) {
           Assert.assertEquals("expected", obj); 
      }
}

ただし、この場合、JUnitがテストをアサートする意味はありません。Junitが意図していることをすでに実行しているからです。ありがとうございます。

4

4 に答える 4

3

ErrorCollector Ruleを見てください。

エラーを「収集」して、最終的に出力することができます。これを使用すると、JUnit は最初のエラーで失敗しなくなります。

于 2012-09-14T09:33:13.897 に答える
1

ここで何を求めているのかは完全には明確ではありません。何を反復しているのかがわかっていれば簡単ですが、反復可能であると仮定すると、ハムクレストマッチャーを確認するのがおそらく最善です。

例えば

asserThat(objList, Matchers.hasItem(expected);

期待値が反復可能要素の要素と等しい場合は合格します。junitにバンドルされているマッチャーを確認するか、外部のhamcrestライブラリをテストプロジェクトに追加します。

于 2012-09-14T13:55:24.677 に答える
0

配列ベースのアサーションを使用できます。この目的のために、列挙型を配列に変換する必要があります。

Object [] enumAsArray = Collections.list(objList).toArray();

于 2012-09-14T09:44:40.180 に答える
0

より大きなデータ構造に対して行うことは、適切な toString() メソッドを使用してこれを比較することです。

例えば

assertEquals(""+expected, ""+obj);
assertEquals(expected, obj);

これを行う理由は、IDE (違いを示すため) またはテキスト比較を使用すると、異なるすべての値とそれらがどのように異なるかを確認できるからです。2 番目のチェックは、それらが本当に等しいことを確認することです。

于 2012-09-14T09:32:36.783 に答える