我已经发现可以使用另一个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测试,因此使用不同的对象。
答案 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()
进行比较。