所以,我甚至不知道从哪里开始。整个惨败都是在八个多小时前开始的,杰里在一个接一个的问题上走出了困境。现在,这个: 点击“点击查看差异”后,它会变得更好:
我有:
- 无效的缓存并重新启动IntelliJ
- 尝试在Double[] numSet = {23.0};
的位置运行,然后将预期结果设置为numSet
而不是"[23.0]"
。没有骰子。
- 有关添加增量的答案无效:JUnit test fails even if the expected result is correct
我觉得值得注意的是,从主类调用方法时,第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;
}
答案 0 :(得分:17)
您正在比较String
和List<Object>
。
所以你正在使用方法assertEquals(Object expected, Object actual);
显然,String
不等于List<Object>
因此失败。
但由于列表的String表示与您编写的相同,因此它会在控制台中隐藏结果,因为它使用此表示向您显示此测试的结果。
所以你应该比较两者的字符串表示:
assertEquals("[23.0]", setSorteer.trimNumberSet(numSet).toString());
更好的想法是直接比较两个列表,而不是将您的测试基于字符串表示,因为它们将来可能会更改,并且您的测试将失败:
assertEquals(Arrays.asList(23.0), setSorteer.trimNumberSet(numSet));
<小时/> 您还没有在方法中返回
List<Double>
的任何原因吗?
public List<Double> trimNumberSet(Double[] numSet) {
List<Double> trimmedNumberSet = new ArrayList<>();
...
return trimmedNumberSet;
}
答案 1 :(得分:2)
正如ZouZou所说,您正在比较不同的数据类型。 numSet是一个双打数组,而trimNumberSet的结果是双打列表。
另外,请注意:将List中的Double值与String进行比较时,我强烈建议您使用数字格式化程序来确保缩放符合您的预期(例如,“23.0”而不是“23.000001”)。 Double值的内部表示通常会导致你得到的结果不是你以前所做的那样。
答案 2 :(得分:1)
我认为您的问题遇到了数据类型。即使数据是“相同的”,测试也可能是比较字符串与整数(或者正在使用的数字实现)。在其他情况下会发生此错误...
尝试将左侧转换为setSorter.trimNumberSet
检索或转换setSorter.trimNumberSet
的返回对象为assertEquals中的字符串的相同数据类型。
希望有所帮助!