Hashmap 与 AssertEquals 不匹配

Hashmap mismatch with AssertEquals

我已经编写了 JUnit 代码来测试 REST POST 调用。

@Test
public  void testPOST_MAPOutput() throws IOException {
    String url="https://reqres.in/api/register";
    requestFields.put("email","eve.holt@reqres.in");
    requestFields.put("password","pistol");
    Map<String,Object> output=new HashMap<String, Object>();
    output.put("id","4");
    output.put("token","QpwL5tke4Pnpja7X4");
    System.out.println(output);
    assertEquals(output,restWebServices.doPostRequest(url,requestFields,httpHeaders, HashMap.class));

}

预期输出和实际输出似乎完全相等,但 JUnit 测试仍然失败。

Expected :java.util.HashMap<{id=4, token=QpwL5tke4Pnpja7X4}>
Actual :java.util.HashMap<{id=4, token=QpwL5tke4Pnpja7X4}>

查看您的代码,我很确定问题出在 Map<String, Object> 表示法上,您在其中使用 Object 作为值。因此,可能有一个 String、一个数字(IntegerLong)或 字面上任何其他 ,只要它的 toString() 方法 returns "4" 你会看到相同的打印。

例如String "4" 和Integer 4 将打印出相同的数字 - 4,但它们绝不相等

考虑映射到更具体的 Object 类型,例如仅使用 String,并在将结果添加到 Map 之前将服务器的结果转换为 String用于比较。