即使有失败,junit 5 也会运行所有断言

Boh*_*huk 2 java junit junit5

即使中间断言失败,JUnit 5 中是否有任何机制可以在测试中运行所有断言?例如:

@Test
public void unitForTest_SomeScenario_ShouldReturn() {

    //Act
    var myObj = myServ.getMyObj();
    //Arrange
    assertThat(myObj).isNotNull();
    assertThat(myObj.getName()).isEqualTo("Steve"); //failed assert
    assertThat(myObj.getLastName()).isEqualTo("Gates");
}
Run Code Online (Sandbox Code Playgroud)

我的目的是运行所有断言并跟踪失败的只是第二个,而不是第三个和第一个。

gly*_*ing 5

您可以使用 JUnit5 的assertAll

例如:

@Test
public void unitForTest_SomeScenario_ShouldReturn() {
    String name = "y";
    assertAll(
            () -> assertThat(name).isNotNull(),
            () -> assertThat(name).isEqualTo("x"), // failed assert
            () -> assertThat(name).isEqualTo("y"),
            () -> assertThat(name).isEqualTo("z") // failed assert
    );
}
Run Code Online (Sandbox Code Playgroud)

将失败并显示以下详细响应:

Expecting:
 <"y">
to be equal to:
 <"x">
but was not.
Comparison Failure: 
Expected :x
Actual   :y
<Click to see difference>


Expecting:
 <"y">
to be equal to:
 <"z">
but was not.
Comparison Failure: 
Expected :z
Actual   :y
<Click to see difference>

org.opentest4j.MultipleFailuresError: Multiple Failures (2 failures)
Run Code Online (Sandbox Code Playgroud)

注意:由于对您的问题的一些评论暗示这可能通过使用单独的测试(而不是具有多个断言的一个测试)更好地表达,但是,只要多个断言是单个“概念断言”的一部分,那么我绝对可以请参阅使用案例assertAll