如何使用管理订单的相等性创建LinkedHashMap

问题描述

在单元测试中,我需要测试元素的顺序:

test("Check map order",() {
  LinkedHashMap<String,String> actualMap = LinkedHashMap();
  actualMap["0"] = "firstValue";
  actualMap["1"] = "secondValue";
  LinkedHashMap<String,String> expectedMap = LinkedHashMap();
  expectedMap["1"] = "secondValue";
  expectedMap["0"] = "firstValue";
  print("actual: $actualMap");
  print("expected: $expectedMap");
  expect(actualMap,isNot(expectedMap));
});

该测试失败,如果遵守订单,则会发生该事件:

actual: {0: firstValue,1: secondValue}
expected: {1: secondValue,0: firstValue}
package:test_api                                                      expect
test/services/game/negotiation/NegotiationGameService_test.dart 33:7  main.<fn>.<fn>

Expected: not {'1': 'secondValue','0': 'firstValue'}
  Actual: {'0': 'firstValue','1': 'secondValue'}

解决方法

第一个可行但有点无聊的想法:

test("Check map order",() {
  LinkedHashMap<String,String> actualMap = LinkedHashMap();
  actualMap["0"] = "firstValue";
  actualMap["1"] = "secondValue";
  LinkedHashMap<String,String> expectedMapSameOrder = LinkedHashMap();
  expectedMap["0"] = "firstValue";
  expectedMap["1"] = "secondValue";
  LinkedHashMap<String,String> expectedMapDifferentOrder = LinkedHashMap();
  expectedMap["1"] = "secondValue";
  expectedMap["0"] = "firstValue";
  print("actual: $actualMap");
  print("expected: $expectedMapSameOrder");
  print("expected: $expectedMapDifferentOrder");
  expect(actualMap,expectedMapSameOrder);
  expect(actualMap.keys,isNot(orderedEquals(expectedMapSameOrder.keys)));
  expect(actualMap,expectedMapDifferentOrder);
  expect(actualMap.keys,orderedEquals(expectedMapDifferentOrder.keys));
});