2016-10-27 4 views
0

私はすべてのテストは、コンソールでの出力と、渡された彼らのためのJUnit順8

@Test 
    public void test(){ 
     Map<String, Integer> actual = new LinkedHashMap<>(); 
     actual.put("longer", 1); 
     actual.put("first", 1); 
     actual.put("thebiggest", 1); 

     Map<String, Integer> expected = new LinkedHashMap<>(); 
     expected.put("thebiggest", 1); 
     expected.put("longer", 1); 
     expected.put("first", 1); 

     System.out.println("===expected"); 
     expected.entrySet().stream().forEach(n->System.out.println(n.getKey())); 
     System.out.println("===actual"); 
     actual.entrySet().stream().forEach(n->System.out.println(n.getKey())); 

     assertEquals(expected, actual); 
     assertTrue(expected.equals(actual)); 
    } 

を含む二つのマップの完全な平等をチェックする必要があります。

ドキュメントのどこ
===expected 
thebiggest 
longer 
first 
===actual 
longer 
first 
thebiggest 

LinkedHashMapは挿入の順序を保持していると書かれています。同じであるが異なる順序付けされた2つのマップの主張が真実である理由よりもなぜですか? 等しい注文が重要な場合は、どのマップを取るべきですか?

+0

挿入順の保持_for繰り返し_ ***。 –

答えて

2

definition of equals for a Mapは、順序にかかわらず同じエントリセットを持つということです。

指定されたオブジェクトとこのマップが等しいかどうかを比較します。指定されたオブジェクトがマップであり、2つのマップが同じマッピングを表す場合はtrueを返します。より正式には、m1.entrySet()。equals(m2.entrySet())と同じ場合、2つのマップm1とm2は同じマッピングを表します。これにより、Mapインタフェースのさまざまな実装間でequalsメソッドが正しく動作することが保証されます。

同じ反復順序をアサートする場合は、両方の反復をリストにコピーしてリストを比較することができます。

+0

同じ注文を確実にするには、別のマップタイプが必要です! –

関連する問題