AssertJ是否支持多维数组深度断言?类似Arrays#deepEquals()
AssertJ多维数组深度断言方案
当然有啦!AssertJ完全支持二维(甚至N维)数组的深度断言,完美匹配你想要的需求——不仅实现了类似java.util.Arrays#deepEquals()的深度比较逻辑,还会抛出带有美化失败信息的断言异常,清晰指出具体哪一个索引位置的元素不符合预期。
核心用法:直接用isEqualTo做深度断言
AssertJ对多维数组的isEqualTo方法默认就采用深度比较逻辑,不需要额外配置。举个实际代码例子:
int[][] actual = {{1, 2}, {3, 5}}; int[][] expected = {{1, 2}, {3, 4}}; // 直接断言多维数组相等 assertThat(actual).isEqualTo(expected);
当断言失败时,你会得到类似这样的清晰报错:
expected: <[[1, 2], [3, 4]]> but was: <[[1, 2], [3, 5]]>
差异位置:actual[1][1] = 5,expected[1][1] = 4
更精细的元素级断言
如果你需要针对多维数组的某个具体维度或元素做精准断言,可以嵌套使用element()方法:
- 断言某一维数组的内容:
// 断言二维数组的第二行(索引1)等于预期数组 assertThat(actual).element(1).isEqualTo(new int[]{3, 4});
- 直接断言某个具体位置的元素值:
// 断言二维数组中第二行第二列的元素等于4 assertThat(actual).element(1).element(1).isEqualTo(4);
这种方式的失败信息会更精准,直接指向你指定的索引位置。
额外提示
AssertJ的多维数组断言逻辑和Arrays.deepEquals()完全对齐,支持所有基本类型数组和对象类型数组的深度比较,而且失败信息会自动展开数组结构,让你一眼就能看到差异点,比原生的deepEquals手动判断后抛异常的体验好太多。
内容的提问来源于stack exchange,提问作者radistao
相关产品推荐
相关产品推荐

