2009-10-03 25 views

答えて

44

リストの平等のために何も特別な処理を行う必要はありません。単にassertEqualsを使用してください。

ArrayListなどのリストは、オブジェクトのequals()メソッドを使用して、リストの対応する位置にあるすべてのオブジェクトが等しいことを確認してequals()を実装します。したがって、リスト内のオブジェクトが正しく等しく実装されているかどうかチェックしたい場合があります。

+0

うん、私はドキュメントを読んで気づいた。 –

+0

この回答の問題は、失敗した場合にリストの内容を報告しないことです。 assertThat(a、is(b));を使ってみてください。代わりに。 starblueのequalsの実装に関する警告はまだ成立しています。 [duplicate question 3236880](http://stackoverflow.com/questions/3236880/assert-list-in-junit)もご覧ください:より良い回答とコードサンプルがあります。 – Barett

+0

未来からの更新:これはプリミティブ型の配列では機能しないようで、どちらの場合でもassertEquals(Object []、Object [])は非推奨です。 assertArrayEqualsを使用します。 – johncip

6

List.equalsのドキュメントを参照してください。

+0

私はJavaに感謝しています。 –

+0

これは、リストがある場合、私はSomeClassのequalsをオーバーライドする必要があることを意味しますか? –

+6

リストの要素を 'Object.equals'と比較します。デフォルトでは、同じインスタンスの場合はtrueになります。同じ内部データを持つ異なるオブジェクトを一致させたい場合は、 'SomeClass'に' equals'(そして 'hashCode')メソッドを提供する必要があります。 –

2

これはやや簡単すぎる回答かもしれないと思いますが(正しいですが) equalsのArrayListsをテストすると、要素の等価性が考えられます。要素が整数の場合は、すべて正常です。しかし、それらがあなた自身のドメインクラスのインスタンスであれば、平等(およびクローニング)を取り巻く落とし穴に気づかなければなりません。チェックしてください:

http://www.artima.com/lejava/articles/equality.html

を平等の実装のヒントの良いセットのために。脇に:オブジェクトをクローンする必要がある場合は、クローン可能なオブジェクトを実装する代わりにコピーコンストラクタを使用することを検討してください。 Cloneableは、あなたが期待していないかもしれない一連の問題を紹介します。

関連する問題