org.junit.ComparisonFailure 结果相同
org.junit.ComparisonFailure with identical results
我克隆了现有项目,其中有一些 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);
}
当我查看结果时,每行的初始空格都突出显示。
结果:
我试过把这个结果复制到MS Word里看,有没有不间断的空格(讨论过),但是所有的空格都是普通的。或者我尝试 运行 使用不同的编码进行测试,但没有任何效果。
如果测试在存储库上运行但在您的本地计算机上不起作用,我猜编码或您生成 json 的方式存在一些差异。例如,您没有显示 readToString
函数或 signedCasesReportView01.json 文件,它们在存储库和本地环境中可能不同。我的猜测是换行,这是不同环境中最常见的问题,当我查看您的测试用例时,没有任何其他特殊字符。
例如,当您将文件复制到 git 存储库并由配置 core.autocrlf 修改它时,它经常发生,它会自动从本地 windows 更改 \r\n机器到 \n 因为它在另一边是 unix。甚至提交的文件在客户端中也可能不会显示出差异,但它们实际上可能是不同的。逐行比较字节流,您应该能够发现差异。
这可能是 Veselin 所建议的行尾问题。也许考虑在不需要文件的确切格式的情况下进行语义比较。
您可以使用 ModelAssert 实现此目的 - https://github.com/webcompere/model-assert
String actual = getObjectMapper().writeValueAsString(view);
String expected = readToString("signedCasesReportView01.json");
assertJson(actual)
.isEqualTo(expected);
不一样的地方也会输出不一样的路径
我克隆了现有项目,其中有一些 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);
}
当我查看结果时,每行的初始空格都突出显示。
结果:
我试过把这个结果复制到MS Word里看,有没有不间断的空格(讨论过
如果测试在存储库上运行但在您的本地计算机上不起作用,我猜编码或您生成 json 的方式存在一些差异。例如,您没有显示 readToString
函数或 signedCasesReportView01.json 文件,它们在存储库和本地环境中可能不同。我的猜测是换行,这是不同环境中最常见的问题,当我查看您的测试用例时,没有任何其他特殊字符。
例如,当您将文件复制到 git 存储库并由配置 core.autocrlf 修改它时,它经常发生,它会自动从本地 windows 更改 \r\n机器到 \n 因为它在另一边是 unix。甚至提交的文件在客户端中也可能不会显示出差异,但它们实际上可能是不同的。逐行比较字节流,您应该能够发现差异。
这可能是 Veselin 所建议的行尾问题。也许考虑在不需要文件的确切格式的情况下进行语义比较。
您可以使用 ModelAssert 实现此目的 - https://github.com/webcompere/model-assert
String actual = getObjectMapper().writeValueAsString(view);
String expected = readToString("signedCasesReportView01.json");
assertJson(actual)
.isEqualTo(expected);
不一样的地方也会输出不一样的路径