单元测试被三个问号混淆

时间:2014-11-19 18:35:14

标签: junit hamcrest

我正在编写一些junits,并进行此检查,比较两个哈希映射的键和值

Iterator<Map.Entry<String, String>> it = expected.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry<String, String> pairs = (Map.Entry<String, String>) it.next();
    assertTrue("Checks key exists", actual.containsKey(pairs.getKey()));
    assertThat("Checks value", actual.get(pairs.getKey()), equalTo(pairs.getValue()));
}

效果很好,但我有一个价值可以绊倒它:

java.lang.AssertionError: Checks value
Expected: "Member???s "
     but: was "Member���s "
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)

我检查了数据,数据是正确的。它似乎是三重奏?以某种方式绊倒某事。有谁知道为什么会被绊倒?对我来说这似乎是非常基本的,它甚至不会被混乱,它是实际的断言。

1 个答案:

答案 0 :(得分:0)

您遇到编码冲突。这可以通过许多不同的方式表现出来,但通常是由于不强制执行一致的编码而导致的。

假设你在某处使用UTF-8 ......

  • 如果使用Maven,请将属性project.build.sourceEncoding设置为UTF-8 See doc for more details。 其他构建系统肯定有选项来指定代码和资源文件编码。
  • 如果使用IO读取(或写入),始终指定编码。例如,从文件中读取时: InputStream is = new FileInputStream(file), "UTF8");

简而言之,找到编码的任何构建系统设置,以及读取文本时涉及IO的任何点,并确保设置所需的编码。