junit 5运行所有Assert,即使存在失败Assert

rmbxnbpk  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(267)

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

@Test
public void unitForTest_SomeScenario_ShouldReturn() {

    //Arrange
    var myObj = myServ.getMyObj();
    //Act & Assert
    assertThat(myObj).isNotNull();
    assertThat(myObj.getName()).isEqualTo("Steve"); //failed assert
    assertThat(myObj.getLastName()).isEqualTo("Gates");
}

我的意图是运行所有Assert并跟踪那些失败的只是第二个,而不是第三个和第一个。

zed5wv10

zed5wv101#

您可以使用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
    );
}

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

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)

注意:因为你的问题上的一些评论暗示,这 * 可能 * 通过使用单独的测试(而不是一个带有多个Assert的测试)来表达更好,但是,只要多个Assert是单个“概念Assert”的一部分,那么我就可以肯定地看到使用assertAll的情况。

相关问题