org.junit.ComparisonFailure具有相同的结果

时间:2018-05-10 11:45:40

标签: java unit-testing junit junit4

我克隆了现有的项目,JUnit-4.12中的一些单元测试。这些测试是在每次推送到远程存储库之后启动的,它们将成功结束,但是当我在eclipse中的本地机器上运行它们时,它们将以ComparisonFailure结束。

org.junit.ComparisonFailure expected:<xy> but was:<xy>

这个错误将结束每次测试,我试图将发送的json与现有的json文件进行比较。

测试

@Test
public void calculateSignedCasesView() throws JsonProcessingException {
    Case case1 = prepareCase();
    getEm().persist(case1);
    SignedCasesViewFilter filter = new SignedCasesViewFilter(new LinkedHashSet<String>(Arrays.asList("testCode")), new Date(0), new Date(0));
    SignedCasesView view = reportService.calculateSignedCasesView(filter);
    String actual = getObjectMapper().writeValueAsString(view);
    String expected = readToString("signedCasesReportView01.json");
    Assert.assertEquals(expected, actual);
}

当我查看结果时,每行都会突出显示初始空格。

结果: test result

我尝试将此结果复制到MS Word中查看,如果没有任何非中断空格(讨论here),但所有空格都是普通的。或者我尝试使用不同的编码运行测试,但没有任何作用。

2 个答案:

答案 0 :(得分:2)

如果测试在存储库上运行并且它们不能在本地计算机上运行,​​我猜测编码或生成json的方式有所不同。您还没有显示示例readToString函数或signedCasesReportView01.json文件,这些文件在存储库和本地环境中可能不同。我的猜测是新行,这是不同环境中最常见的问题,当我查看你的测试用例时,没有任何其他特殊字符。

例如,当您将文件复制到git存储库并且它被config core.autocrlf修改时会经常发生,它会自动将\ r \ n从本地Windows机器更改为\ n,因为它在另一端是unix。即使是提交的文件也可能在客户端中没有显示出差异,但它们实际上可能不同。比较字节流或逐行,您应该能够发现差异。

答案 1 :(得分:0)

这可能是 Veselin 建议的行尾问题。或许可以考虑在不需要文件的确切格式的情况下进行语义比较。

您可以使用 ModelAssert - https://github.com/webcompere/model-assert

String actual = getObjectMapper().writeValueAsString(view);
String expected = readToString("signedCasesReportView01.json");
assertJson(actual)
    .isEqualTo(expected);

不一样的地方也会输出不一样的路径。