从HashMap初始化EnumMap

时间:2016-08-19 17:22:09

标签: java junit

我已经发现可以使用另一个HashMap的值来初始化java EnumMap,但这是通过测试。我不需要使用有效的双支架或类似的东西,我只需要从给定的地图创建地图。

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,使用测试类enumMap调用该方法。

这是在我的测试类中:TestClassForItems.java     public enum ITEMS {         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));
}

返回相同的String结果但由于从main实例化所有必要的属性来运行我的Junit测试,因此使用不同的对象。

2 个答案:

答案 0 :(得分: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;
}

您混淆了数据类型。您正在使用Entry作为字符串。如果使用正确的通用值定义数据类型,则会出现编译错误:

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;
}

答案 1 :(得分:1)

变化:

assertSame

要:

assertEquals

assertSame()==相同,而assertEquals()equals()进行比较。