Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得';差异';Java中的数组之间_Java_Arrays_Junit_Diff_Multidimensional Array - Fatal编程技术网

如何获得';差异';Java中的数组之间

如何获得';差异';Java中的数组之间,java,arrays,junit,diff,multidimensional-array,Java,Arrays,Junit,Diff,Multidimensional Array,我试图为一些类编写一些测试用例,这些类涉及测试二维数据数组的相等性。这是我的第一次尝试: double[][] expected = { {0, 104, 0}, {145.5, 0, 0}, {83, 0, 0} }; double[][] actual = someObject.getArray(); 现在,我看到JUnit没有双数组的“arrayEquals”,这可能是由于浮点问题(您确实希望使用delta vs equals)。我注意到

我试图为一些类编写一些测试用例,这些类涉及测试二维数据数组的相等性。这是我的第一次尝试:

double[][] expected = {
        {0, 104, 0},
        {145.5, 0, 0},
        {83, 0, 0}
};

double[][] actual = someObject.getArray();
现在,我看到JUnit没有双数组的“arrayEquals”,这可能是由于浮点问题(您确实希望使用delta vs equals)。我注意到这正是我需要确定它们是否相等的方法:

static void  assertEquals(java.lang.String message, double[] expected, double[] actual, double delta) 

现在,一切都很好。我想做的是给出一个有意义的错误信息,不仅仅是说两者不相等,而是在它们不相等的地方。有没有一种简单的方法可以做到这一点,除了比较维度,然后迭代每个对应的元素并测试是否相等?为了得到一条有意义的错误消息,不得不做与断言中相同的事情,这似乎很愚蠢。

那么,您是在尝试比较double[]s还是double[]s

如果您正在比较double[]s(1D数组),那么是的,使用Junit插件怎么样?它的默认错误消息不是您需要的吗?如果您能够将测试编写为使用Double[],那么JUnit对对象[]进行操作的assertArraysEquals()方法将起作用。不过,它会比较两倍的结果是否完全相等——假设这是您想要的

如果要比较double[],那么这两种方法都不起作用。即使double[]是一个对象[],您也不打算比较单个double[],因为它们只使用引用相等


您可以使用commons lang进行比较,这是事实,但它不会帮助您生成关于差异所在的有用消息。为此,我认为您需要使用自己的方法。

我认为您将单元测试与检测/调试混为一谈。单元测试的目的是确定对象是否按预期工作。如果您养成了在测试用例中包含(有效地)插装的代码的习惯,那么您将增加编写旨在通过的测试用例的可能性

您的对象有一个方法,即返回一个
double[][]
。您的测试用例告诉您它没有按预期工作。是时候调试代码了


(我理解这可能是一个有争议的观点。)

我是否理解正确,除了输出之外,您对JUnit插件中的assertEquals(String,double[],double[],double)方法感到满意


假设您拥有或可以获得ArrayAssert类的源代码,只需重新实现该方法(复制和粘贴,但首先检查许可证),并根据需要增强新自定义assertEquals方法中的输出。我想,不会花太长时间的

据我所知,I82MOT希望测试二维数组的相等性和详细的错误/失败消息(如“单元格a12预期值104.0,但找到值-104.0”)。是的。我(可能是迂腐的,可能是明智的:)的观点是,如果他的对象有一个方法getCell(row,col),那么为给定的输入识别它的失败将属于测试领域。事实上,他正在寻找他的单元测试作为调试器来完成双重任务。在测试框架中添加一个“特性”来识别第一个失败案例会告诉您第一个实例。它应该列出所有失败的实例吗?更改测试数据时会发生什么情况?您是否得到一组不同的失败单元?测试失败了,它告诉你你需要知道的是:你有一个bug。我想我从来没有想过提供更多关于测试失败的数据会侵犯到“调试”领域,但也许你是对的。