[解決済み] 2つのList<E>が同じ要素を同じ順序で含んでいることをJUnitでテストするにはどうすればよいですか?
質問
文脈
私は単純な
JUnit
のテストは
MyObject
クラスのテストを行います。
A
MyObject
は静的なファクトリーメソッドから作成することができます。
文字列
.
MyObject.ofComponents("Uno", "Dos", "Tres");
が存在する間、いつでも
MyObject
が存在する間、クライアントはそれが作られた時のパラメータを
リスト<E>
を通して
.getComponents()
メソッドを使用します。
myObject.ofComponents(); // -> List<String>: { "Uno", "Dos", "Tres" }
つまり
MyObject
は、それを生成したパラメータのリストを記憶し、公開しているのです。このコントラクトの詳細。
-
の順序は
getComponents
の順序は、オブジェクトの作成時に選択されたものと同じになります。 - 後続の複製 文字列 コンポーネントは許可され、順番に保持されます
-
の動作は
null
は未定義です(他のコードではnull
がファクトリーに到達しないことを保証します) - オブジェクトのインスタンス化の後、コンポーネントのリストを変更する方法はありません。
を作成する簡単なテストを書いています。
MyObject
のリストから
文字列
で、同じリストを返すことができるかどうかチェックします。
.getComponents()
.
私はすぐにこれを行いますが、これは現実的なコードパスで離れた場所で起こるはずのものです。
.
コード
私の試みは以下の通りです。
List<String> argumentComponents = Lists.newArrayList("One", "Two", "Three");
List<String> returnedComponents =
MyObject.ofComponents(
argumentComponents.toArray(new String[argumentComponents.size()]))
.getComponents();
assertTrue(Iterables.elementsEqual(argumentComponents, returnedComponents));
質問
-
は
グーグル グアバ
Iterables.elementsEqual()
ビルドパスにライブラリがある場合、これらの 2 つのリストを比較する最良の方法は? を越えるこのヘルパーメソッドを使うべきでしょうか? Iterable<E> ...サイズをチェックし、そして実行中のイテレーション.equals()
...またはインターネット検索が示唆する他のメソッド? ユニットテストのためにリストを比較するための標準的な方法は何ですか?
私が得たいオプションの洞察
- メソッドテストは合理的に設計されているか?の専門家ではありません。 JUnit !
-
は
.toArray()
を変換するのに最適な方法です。 リスト<E> を E の varargs に変換しますか?
どのように解決するには?
Hamcrestを使用する方が、失敗した場合の出力がはるかに良いので、私は好んで使用します
Assert.assertThat(listUnderTest,
IsIterableContainingInOrder.contains(expectedList.toArray()));
報告の代わりに
expected true, got false
報告されます
expected List containing "1, 2, 3, ..." got list containing "4, 6, 2, ..."
IsIterableContainingInOrder.contain。
Javadocによると
Iterable を一度だけ検査し、指定された項目の中の対応する項目と論理的に等しい一連の項目を生成したときにマッチする Iterable 用の matcher を作成します。正のマッチの場合、検査された Iterable は指定された項目の数と同じ長さである必要があります。
そのため
listUnderTest
は同じ数の要素を持ち、各要素は順番に期待される値と一致しなければなりません。
関連
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] JUnit4でテストメソッドを特定の順序で実行するには?
-
[解決済み】JUnitでsrc/test/resourcesディレクトリのパスを取得する方法は?
-
[解決済み】2つの異なるリストが全く同じ要素を含んでいるかどうかを調べる簡単な方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
プロジェクトの依存関係を解決できない。
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
Junitのユニットテストはjava.lang.Testを報告します。
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
API の戻り値を処理するために ResponseEntity を使用する
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション