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

2022-09-03 00:31:16

所以,我甚至不知道从哪里开始。这整个惨败始于八个多小时前,杰里操纵着我摆脱了一个又一个问题。现在,这个:Junit test failing, with passing results在单击“单击以查看差异”之后,它变得更好:enter image description here

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

我觉得还值得注意的是,从主类调用方法时,第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;
}

答案 1

您正在比较 a 和 a。StringList<Object>

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

显然,a 不等于 a,因此是失败的。StringList<Object>

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

因此,您应该比较两者的字符串表示形式:

assertEquals("[23.0]", setSorteer.trimNumberSet(numSet).toString());

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

assertEquals(Arrays.asList(23.0), setSorteer.trimNumberSet(numSet));


还有任何原因,你不在你的方法中返回a?List<Double>
public List<Double> trimNumberSet(Double[] numSet) {
    List<Double> trimmedNumberSet = new ArrayList<>();
    ...
    return trimmedNumberSet;
}

答案 2

我认为您的问题遇到了数据类型。即使数据是“相同的”,测试也可能正在比较字符串与整数(或任何正在使用的数字实现)。在其他情况下会发生此错误...

尝试将左侧转换为在 assertEquals 中检索或将 返回对象转换为字符串的相同数据类型。setSorter.trimNumberSetsetSorter.trimNumberSet

希望有所帮助!


推荐