比较 JUnit 断言中的数组,简洁的内置方式?

发布于 2024-10-03 01:41:42 字数 523 浏览 5 评论 0原文

是否有一种简洁的内置方法可以对 JUnit 中的两个类似类型的数组进行 equals 断言?默认情况下(至少在 JUnit 4 中)它似乎对数组对象本身进行实例比较。

EG,不起作用:

int[] expectedResult = new int[] { 116800,  116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);

当然,我可以手动完成:

assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
    assertEquals("mismatch at " + i, expectedResult[i], result[i]);

..但是有更好的方法吗?

Is there a concise, built-in way to do equals assertions on two like-typed arrays in JUnit? By default (at least in JUnit 4) it seems to do an instance compare on the array object itself.

EG, doesn't work:

int[] expectedResult = new int[] { 116800,  116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);

Of course, I can do it manually with:

assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
    assertEquals("mismatch at " + i, expectedResult[i], result[i]);

..but is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

我的影子我的梦 2024-10-10 01:41:42

使用 org.junit.Assert 的方法 assertArrayEquals:

import org.junit.Assert;
...

Assert.assertArrayEquals( expectedResult, result );

如果此方法不可用,您可能不小心从junit.framework导入了Assert类。

Use org.junit.Assert's method assertArrayEquals:

import org.junit.Assert;
...

Assert.assertArrayEquals( expectedResult, result );

If this method is not available, you may have accidentally imported the Assert class from junit.framework.

楠木可依 2024-10-10 01:41:42

您可以使用 Arrays.equals(..) :

assertTrue(Arrays.equals(expectedResult, result));

You can use Arrays.equals(..):

assertTrue(Arrays.equals(expectedResult, result));
柠檬色的秋千 2024-10-10 01:41:42

我更喜欢将数组转换为字符串:

Assert.assertEquals(
                Arrays.toString(values),
                Arrays.toString(new int[] { 7, 8, 9, 3 }));

这样我可以清楚地看到错误值在哪里。这仅适用于小型数组,但我在单元测试中很少使用项目数超过 7 的数组。

toString 重载返回所有基本信息时,此方法适用于基本类型和其他类型。

I prefer to convert arrays to strings:

Assert.assertEquals(
                Arrays.toString(values),
                Arrays.toString(new int[] { 7, 8, 9, 3 }));

this way I can see clearly where wrong values are. This works effectively only for small sized arrays, but I rarely use arrays with more items than 7 in my unit tests.

This method works for primitive types and for other types when overload of toString returns all essential information.

绳情 2024-10-10 01:41:42

JUnit 5 我们可以导入 Assertions 并使用 Assertions.assertArrayEquals 方法

import org.junit.jupiter.api.Assertions;

Assertions.assertArrayEquals(resultArray,actualResult);

JUnit 5 we can just import Assertions and use Assertions.assertArrayEquals method

import org.junit.jupiter.api.Assertions;

Assertions.assertArrayEquals(resultArray,actualResult);
假扮的天使 2024-10-10 01:41:42

使用 junit4 和 Hamcrest 您可以获得比较数组的简洁方法。它还提供了故障跟踪中错误所在位置的详细信息。

import static org.junit.Assert.*
import static org.hamcrest.CoreMatchers.*;

//...

assertThat(result, is(new int[] {56, 100, 2000}));

故障跟踪输出:

java.lang.AssertionError: 
   Expected: is [<56>, <100>, <2000>]
   but: was [<55>, <100>, <2000>]

Using junit4 and Hamcrest you get a concise method of comparing arrays. It also gives details of where the error is in the failure trace.

import static org.junit.Assert.*
import static org.hamcrest.CoreMatchers.*;

//...

assertThat(result, is(new int[] {56, 100, 2000}));

Failure Trace output:

java.lang.AssertionError: 
   Expected: is [<56>, <100>, <2000>]
   but: was [<55>, <100>, <2000>]
浅沫记忆 2024-10-10 01:41:42

我知道问题是针对 JUnit4 的,但如果您碰巧被 JUnit3 困住了,您可以创建一个简短的实用函数,如下所示:

private void assertArrayEquals(Object[] esperado, Object[] real) {
    assertEquals(Arrays.asList(esperado), Arrays.asList(real));     
}

在 JUnit3 中,这比直接比较数组更好,因为它将准确地详细说明哪些元素不同。

I know the question is for JUnit4, but if you happen to be stuck at JUnit3, you could create a short utility function like that:

private void assertArrayEquals(Object[] esperado, Object[] real) {
    assertEquals(Arrays.asList(esperado), Arrays.asList(real));     
}

In JUnit3, this is better than directly comparing the arrays, since it will detail exactly which elements are different.

辞别 2024-10-10 01:41:42

org.junit.jupiter 中的类断言.api

使用:

public static void assertArrayEquals(int[] expected,
                                     int[] actual)

Class Assertions in org.junit.jupiter.api

Use:

public static void assertArrayEquals(int[] expected,
                                     int[] actual)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文