2017-06-08 17 views
0

Listオブジェクトを要素の順序に関係なく比較することに関する多くの質問と回答が見つかりましたが、問題はより複雑です。他のプロパティの中でも、List。私は内側のリストの要素の順序にかかわらず、2つのbeanのassertEqualsを実行したい。これを行う簡単な方法はありますか?JUnit:リストの順序に関係なくListを含む2つのBeanを比較します

答えて

0

回答はhereです。アイデアは、hamcrestアサートを使用することです。あなたはJUnitのは、実際に私の提案は、あなたがあなたの同等メソッドをオーバーライドした場合、あなたはあなたが期待しているものを達成できるだろう、オブジェクトの同等method.Soをシーンの後ろのassertEquals(expectedObject、actualObject)を呼ぶのです

import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; 
import static org.junit.Assert.assertThat; 

public class CompareListTest { 

    @Test 
    public void compareList() { 
     List<String> expected = Arrays.asList("String A", "String B"); 
     List<String> actual = Arrays.asList("String B", "String A"); 

     assertThat("List equality without order", 
      actual, containsInAnyOrder(expected.toArray())); 
    } 

} 
+0

利用可能utilの

String expectedString = String.valueOf(expected); String actualString = String.valueOf(actual); if (expectedString.equals(actualString)) { return formatted + "expected: " + formatClassAndValue(expected, expectedString) + " but was: " + formatClassAndValue(actual, actualString); } else { return formatted + "expected:<" + expectedString + "> but was:<" + actualString + ">"; } 

やApacheいいえ、私は2つのリストを比較したくない:私は2つを比較したいですListとその他のプロパティの両方を含むBean。 – Pino

+0

@Pino誤解をおかけして申し訳ありません。あなたの状況をよりよく理解するためにいくつかのコードを追加すれば素晴らしいことでしょう –

0

assertEqualの背後にあるロジック。均等法のoveridingせずに2つのオブジェクトをチェックする

<dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.5</version> 
     </dependency> 

API

EqualsBuilder.reflectionEquals(obj1, obj2) 
+0

はい、わかります。そしてequals()を変えずに?任意の "スマート"ライブラリですか? – Pino

+0

@Pinoあなたは[assertj](http://joel-costigliola.github.io/assertj/)を見ることができ、この目的のためにクールなAPIメソッドがたくさんあります。 –

関連する問題