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

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

double[][] actual = someObject.getArray();

现在,我看到JUnit没有双数组的'arrayEquals',可能是由于浮点问题(你真的想使用delta vs equality)。我注意到 Junit-Addons 正是我需要确定的方法如果他们是平等的:

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

现在,这一切都很好。我希望能够做的是给出一个有意义的错误信息,而不仅仅是说两者是不相等的,而其中它们是不相等的。有没有一种简单的方法可以做到这一点,缺少比较维度,然后迭代每个相应的元素并测试相等性?在断言中做同样的事情似乎很愚蠢,只是为了获得有意义的错误信息。

有帮助吗?

解决方案

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

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

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

其他提示

那么,你想比较double [] s还是double [] [] s?

如果你要比较double [] s(1D阵列),那么,使用Junit-Addons怎么样?是它的默认错误信息不是你需要的吗?如果您能够编写测试以使用Double [],那么对Object []进行操作的JUnit的assertArraysEquals()方法将起作用。它会比较完全相等的双精度 - 假设这是你想要的。

如果您要比较double [] [],那么这些都不起作用。即使double [] []是Object [],你也不打算比较单个double [],因为它们只是使用引用相等。

你可以使用commons-lang进行比较,虽然它无法帮助你生成有关差异所在位置的有用信息。为此,我认为你需要推出自己的方法。

我是否正确,你对JUnit-Addons的assertEquals(String,double [],double [],double)方法感到满意,除了输出?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top