java - junit 5 运行所有断言,即使有一个失败

标签 java junit junit5

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

@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");
}

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

最佳答案

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

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

关于java - junit 5 运行所有断言,即使有一个失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62929661/

相关文章:

java - 使用S格式打印实现Formattable的类

java - PowerMockito 和 CORBA 冲突

java - junit5 创建临时文件

java - Intellij Idea 社区无法识别 JUnit Jupiter 的注解 @DisplayName

java - 如何实例化 Guava EnumBiMap?

java - 延迟后缓存 Mono<>

Java - 数组类型到对象类型的转换

maven - Arquillian 收缩包装

java - 类型 org.powermock.api.support.membermodification.MemberModifier 无法解析。它是从所需的 .class 文件间接引用的

java - 线程 "main"java.lang.NoClassDefFoundError : org/junit/platform/commons/util/ClassNamePatternFilterUtils 中出现异常