2016-08-19 13 views
1

私はJava EnumMapを初期化することが別のHashMapの値で可能であることを確認しましたが、これはテストによるものです。私は、効率的な二重括弧などを使う必要はありません。マップからマップを作成するだけです。EnumMap HashMapからの初期化

public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) { 
    EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class); 
    Iterator iterator = prices.entrySet().iterator(); 
    Iterator keys = prices.keySet().iterator(); 

    HashMap map = new HashMap<String, Double>(); 
    while(keys.hasNext()) { 
     map.put(iterator.next(),keys.next()); 
    } 
    promoItems.put(ITEMS.valueOf(state),map); 
    return promoItems; 
} 

私はJUnitの中で書いていると、これは私のイテレータは何とか

java.lang.AssertionError: expected: java.util.EnumMap<{ORIGINAL={ProductC=3.0, ProductA=1.0, ProductB=2.0}}> but was: java.util.EnumMap<{ORIGINAL={ProductC=3.0, ProductA=1.0, ProductB=2.0}}>

私は私のクラスに一つだけenumMapを使用するために必要な SOLUTIONとユニットテストが呼び出す間違っていると言いますテストクラスenumMapを使用してメソッドを呼び出します。

これは私のテストクラスであった:TestClassForItems.java起因する主からインスタンスに同じ文字列の結果が、異なるオブジェクトの使用を返す パブリック列挙項目{ ONPROMO、ORIGINAL、OFFPROMO }

@Test 
public void onRedLinePromotionListOriginalPriceTest() { 
    testPromoState = "ORIGINAL"; 

    testPrices.put("Product_A", 1.00); 
    testPrices.put("Product_B", 2.00); 
    testPrices.put("Product_C", 3.00); 
    expectedPrices = testPrices; 
    expectedGoodsMap.put(TestClassForItems.ITEMS.ORIGINAL, testPrices); 

    assertSame(expectedGoodsMap, TestClass.getPromotionItems(TestClassForItems.ITEMS.ORIGINAL,testPrices)); 
} 

私のJunitテストを実行するのに必要なすべての属性。

+0

生の種類は使用しないでください。 – shmosel

+0

@shmoselは今編集してあなたの考えを見て編集を行いました。 –

+1

あなたが何を変更したのか分かりませんが、 'iterator'、' keys'、 'map'はすべて生の型を使用しています。 – shmosel

答えて

2

短いソリューション:

public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) { 
    EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class); 
    promoItems.put(ITEMS.valueOf(state), new HashMap<>(prices)); 
    return promoItems; 
} 

あなたはデータ型を混同しています。エントリを文字列として使用しています。

public EnumMap<ITEMS, Map<String, Double>> getPromotionItems(String state, Map<String, Double> prices) { 
    EnumMap<ITEMS, Map<String, Double>> promoItems = new EnumMap<>(ITEMS.class); 
    Iterator<Entry<String, Double>> iterator = prices.entrySet().iterator(); 
    Iterator<String> keys = prices.keySet().iterator(); 

    HashMap<String, Double> map = new HashMap<String, Double>(); 
    while (keys.hasNext()) { 
     map.put(iterator.next(), keys.next()); 
    } 
    promoItems.put(ITEMS.valueOf(state), map); 
    return promoItems; 
} 
+0

編集はまだ私が得ていたものを与える。もう一度それを実行しようとしています。 @David Perez Cabrera –

+0

Perez Cabreraこのソリューションは私が始めたものでしたが、問題はJUnitです。これらの結果はAssertionErrorを示すべきではありません。 –

+0

@April_Naraあなたはjunitのフルテストを投稿できますか? –

0

変更:

assertSame 

へ:

assertEquals 

assertSame()が同じであるあなたが右の一般的な値を持つデータ型を定義する場合は、コンパイルエラーが発生します==であり、assertEquals()equals()となります。

+0

等号は私が探しているオブジェクトの比較のようですが、上の結果は両方で同じ結果になっています。 AssertionErrorで期待される結果と実際の結果はどのように同じですか? –