首页 > 解决方案 > 如何创建具有平等管理顺序的 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'}

标签: unit-testingdartlinkedhashmap

解决方案


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

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

推荐阅读