JUnit测试失败但显示相同的预期和实际结果

nih*_*lon 11 java unit-testing intellij-idea junit4

所以,我甚至不知道从哪里开始.整个惨败都是在八个多小时前开始的,杰里在一个接一个的问题上走出了困境.现在,这个: Junit测试失败,传递结果 点击"点击查看差异"后,它会变得更好: 在此输入图像描述

我有:
- 无效的缓存并重新启动IntelliJ
- 尝试运行在哪里Double[] numSet = {23.0};然后将预期结果设置为numSet而不是"[23.0]".没有骰子.
- 有关添加增量的答案不起作用:即使预期结果正确,JUnit测试也会失败

我觉得值得注意的是,当从主类调用方法时,假设在第48行出现的错误没有显示出来,所以我不清楚它可能是什么.

任何帮助将不胜感激.

以下是要测试的方法的代码.差点忘了:

public List<Object> trimNumberSet(Double[] numSet) {
    List<Object> trimmedNumberSet = new ArrayList<>();

    for (int i = 0; i < numSet.length; i++) {
        if (numSet[i] != null) {
            trimmedNumberSet.add(numSet[i]);
        }
    }
    return trimmedNumberSet;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 19

你正在比较a String和a List<Object>.

所以你正在使用这种方法 assertEquals(Object expected, Object actual);

显然a String不等于a List<Object>,因此失败.

但由于列表的String表示与您编写的相同,因此它会在控制台中隐藏结果,因为它使用此表示向您显示此测试的结果.

所以你应该比较两者的String表示:

assertEquals("[23.0]", setSorteer.trimNumberSet(numSet).toString());
Run Code Online (Sandbox Code Playgroud)

更好的想法是直接比较两个列表,而不是将您的测试基于字符串表示,因为它们将来可能会更改,您的测试将失败:

assertEquals(Arrays.asList(23.0), setSorteer.trimNumberSet(numSet));
Run Code Online (Sandbox Code Playgroud)


还有任何原因,你没有List<Double>在你的方法中返回?

public List<Double> trimNumberSet(Double[] numSet) {
    List<Double> trimmedNumberSet = new ArrayList<>();
    ...
    return trimmedNumberSet;
}
Run Code Online (Sandbox Code Playgroud)

  • 在我打完字之前不小心按了 Enter 键:有时,我对刚接触这些东西感到非常恼火。谢谢邹邹!********* 它不返回`List&lt;Double&gt;` 的原因是发送到方法中的`Double[]` 是从`List&lt;Object 中分离数字和单词的结果的一半&gt;`。所以,从技术上讲,这种方法有两件事。它正在将 `Double[]` 转换回 `List&lt;Object&gt;` 并在填充列表时从数组中修剪 `null` 值。我知道它真的不应该同时做两件事。别再评判我了。:D (2认同)