2016-04-14 96 views
2

私はJavaプロジェクト用のJUnitテストケースを作成しており、コードラインをチェックするためにカバレッジツールを使用しています。問題は:私はオブジェクトの2つのリストを持っています。私は、assertTrueや他の可能なassert文を使用して、equalするオブジェクトの結果を比較する必要があります。以下のassert文を使って、Assertion Errorのようなエラーが出ます。 2つのリストを簡単に比較する方法はありますか?JUnitの2つのオブジェクトリストの比較

//actual  
List<ProjectData> actuals = ProjectManagerDao.getProjects("x", "y", "z"); 
// expected 
List<ProjectData> expecteds = new ArrayList<>(); 
ProjectData p1 = new ProjectData(); 
p1.setId("a"); 
p1.setName("b"); 
expecteds.add(p1); 

assertTrue(JsonProvider.getGson().toJson(actuals).equalsIgnoreCase(JsonProvider.getGson().toJson(expecteds))); 
//or 
assertTrue(actuals.equalIgnoreCase(expeteds);//Not working for list of objects but working for comparing two strings 

これは私がちょうどリストを比較しないで、JUnitの中で平等を主張できるようにする必要があるという点でJava Compare Two Lists異なります。

+0

おかげで、私はJUnitの中に2つのリストを比較する必要がでステートメントをない主張Java .. –

+1

比較の結果を 'boolean'に代入し、それをアサートしてください。 –

+0

私は試してみましょうが、あなたはどのように表示できますか? –

答えて

3

使用Assert.assertArrayEquals(Object[] expecteds, Object[] actuals)コンテンツ平等のための2つの配列を比較する方法:

Assert.assertArrayEquals(expected.toArray(), actuals.toArray()); 

equals方法は、テストケースに適していないですので、同一の参照であることのための配列を比較します。

その他の質問:org.junit.Assertではなく、廃止されたjunit.Assertを使用することを忘れないでください。

0

を使用でき

Assert.assertEquals(java.lang.Object expected, java.lang.Object actual); 

例:

ArrayList<String> list1 = new ArrayList<>(); 
list1.add("hello"); 
ArrayList<String> list2 = new ArrayList<>(); 
list2.add("hello"); 
Assert.assertEquals(list1, list2); 

ソース:Junit API

またはあなたが以下のように

ArrayList<String> list1; 
ArrayList<String> list2; 

Assert.assertArrayEquals(list1.toArray(), list2.toArray()); 
できる配列比較法を使用したい場合

assertEqualsメソッドを使用することをお勧めします。

PS:(リスト内に格納されたユーザ定義のオブジェクトが上書き等しいとハッシュコードメソッドを有していなければならない)

+0

しかし、アサートしてください。assertEqualsは廃止された関数を示し、2番目の関数は動作しますがassertArrayEqualsのようなassert文はありません –

+0

JUnitライブラリのどのバージョンがおもちゃを使用していますか? – praveen

+0

JUnit 4また、EclEmmaプラグインによるカバレッジツールを使用しています。 –

3

要するに:

assertThat :JUnitテストを書くとき一方が必要正確に一つのアサートがあります

あなただけ

is()がhamcrestマッチャある
assertThat("optional message printed on fails", actualArrayListWhatever, is(expectedArrayListWhatever)) 

ようなコードを記述します。

このアプローチは、あらゆる種類のコレクションやものに対して機能します。自然な「要素ごとの要素を比較」することができます(さらに、特定のテストに使用できる他のhamcrestの正規表現があり、独自のマッチャーを書くのも簡単です)。

(真剣に、私はassertThat()が動作しません一つのケースを見ていない、またはそれ以下で読み取り可能なコードになるでしょうが)コメントを