使用 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)))
);
我用 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)))
);