JUnit5 assertAll 私有方法断言被忽略

JUnit5 assertAll private method assertions being ignored

我使用 JUnit5 assertAll 调用一个方法来执行断言,但注意到当断言应该失败时,测试实际上通过了。似乎调用如下方法被忽略了。

assertAll(
    () -> jsonAssertions(actual, expectedUrl)
);

private Executable[] jsonAssertions(String actual, String expectedUrl) {
    return new Executable[] {
        () -> ProductAssert.assertThat(actual).urlEquals(expectedUrl)
    };
}

(ProductAssert 是自定义 assertJ 断言 class)。


虽然这很好用

assertAll(
    () -> ProductAssert.assertThat(actual).urlEquals(expectedUrl)
);

JUnit 5 assertAll takes a list of Executable 个实例。

按照您现在的方式,您实际上并没有将 Executable 列表传递给 assertAll。不是将匿名方法传递给 assertAll,而是直接传递 jsonAssertions 的结果:

@Test
private void test() {
    assertAll(jsonAssertions(actual, expected));
}

private Executable[] jsonAssertions(String actual, String expected) {
    return new Executable[] {
        () -> assertThat(actual).isNotNull(),
        () -> assertThat(expected).isNotNull(),
        () -> assertThat(actual).isEqualTo(expected)
    };
}