使用 JUnit 5 断言列表 <String[]>

Assert List<String[]> with JUnit 5

我用 JUnit 4 断言进行了这个测试:

var actual = valueCaptor.getAllValues();
var expected = List.of(new String[] { "1", " A" }, new String[] { "2", " B" }, new String[] { "3", " C" });
for (int i = 0; i < expected.size(); i++) {
    org.junit.Assert.assertArrayEquals(expected.get(i), actual.get(i));
}

我想使用 JUnit 5 断言,我已经尝试过:

Assertions.assertIterableEquals(expected, actual);

但是它失败了,因为实际的数组与预期的数组是不同的对象。有没有办法用 JUnit 5 以更简洁的方式转换我的 JUnit 4 断言?

使用assertAll可以说更简洁一些。不过,使用它的主要好处是您可以执行 所有 断言,然后才使用所有断言的信息使测试失败,而不是像第一次违规一样快速失败当前代码中的循环确实如此。这样,如果您的代码中有多个错误,您可以一次修复所有错误,而不必一次解决一个:

Assertions.assertAll(
    IntStream.range(0, actual.size())
             .mapToObj(i -> () -> Assertions.assertArrayEquals(expected.get(i),
                                                               actual.get(i)))
);