java - 如何断言数组的 Java Hashmap?

标签 java arrays junit hashmap multidimensional-array

我正在通过组合其他三个 HashMap ()并添加文件名来构建一个新的 HashMap ()。我如何断言新的 HashMap 是正确的?嵌套数组导致测试失败。

此代码是我失败测试的简化示例:

@Test
public void injectArrayIntoHashMap() {
  HashMap map = new HashMap();
  map.put("hi", new String[] { "hello", "howdy" });

  HashMap newMap = new HashMap();
  newMap.put("hi", new String[] { "hello", "howdy" });

  assertEquals(map, newMap);
}

更新:好的,根据 Hna 的建议,我使用 ArrayList 进行了测试。但是,我随后意识到我需要在 ArrayList 中实例化一个对象,现在测试失败了。这似乎与 ArrayList 中的对象具有不同的内存地址这一事实有关。我是 Java 的新手,将对象插入 ArrayList 这是我试图避免“if”语句的尝试。有没有更好的办法?或者只是让我的测试通过的简单答案?

这是新代码:

@Test
public void sampleTest() throws IOException {
  HashMap expectedResult = new HashMap();
  expectedResult.put("/images",                   new ArrayList(Arrays.asList("/images", new Public())));
  expectedResult.put("/stylesheets",              new ArrayList(Arrays.asList("/stylesheets", new Public())));

  HashMap actualResult = test();

  assertEquals(expectedResult, actualResult);
}

public HashMap test() {
  HashMap hashMap = new HashMap();
  hashMap.put("/images",      new ArrayList(Arrays.asList("/images",      new Public())));
  hashMap.put("/stylesheets", new ArrayList(Arrays.asList("/stylesheets", new Public())));
  return hashMap;
}

最佳答案

这会失败,因为当 assertEquals 在数组之间进行比较时,它会检查内存地址是否相等,这显然失败了。解决问题的一种方法是使用像 ArrayList 这样的容器,它实现了 equals 方法,并且可以按照您想要的方式进行比较。

这是一个例子:

public void injectArrayIntoHashMap() {
      HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
      ArrayList<String> l1 = new ArrayList<String>();
      l1.add("hello");
      l1.add("howdy");
      map.put("hi", l1);

      HashMap<String, ArrayList<String>> newMap = new HashMap<String, ArrayList<String>>();
      ArrayList<String> l2 = new ArrayList<String>();
      l2.add("hello");
      l2.add("howdy");
      newMap.put("hi", l2);

      System.out.println(map.equals(newMap));
}

关于java - 如何断言数组的 Java Hashmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165660/

相关文章:

java - (Java) 2D 游戏出现错误

c - 矩阵内结构内的数组

java - 当任何 Any 参数用于方法时,Mockito stub 返回 null

java - Junit - 模拟一个文件

java - 如何将 Electron.js 与桌面应用程序的 Java 代码连接起来?

java - 如何从数组列表中删除对象

java - 用于分析 Java 源代码的工具

javascript - 如何在Reactjs中显示对象内数组的内容

arrays - 在一组 {0......2^k -1} 范围内找到缺失的数字

java - 寻找单元测试的最佳实践? (如果不开发测试优先)