Pode haver momentos em que precisamos usar múltiplos asserts em um mesmo teste. Independente se você considera certo ou errado, afinal não estamos aqui para julgar, eu gostaria de apresentar uma forma de lidar melhor com estes asserts agrupando-os através do método assertAll().

No código abaixo eu tenho 2 testes, cada um com 2 asserts que falham. No primeiro eu usei asserts individuais enquanto no segundo eu os agrupei.

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.fail;

import org.junit.jupiter.api.Test;

class AppTest {
  @Test
  void usingIndividualAsserts() {
    fail("Test 1, assert 1");
    fail("Test 1, assert 2");
  }

  @Test
  void usingGroupedAsserts() {
    assertAll(
      () -> fail("Test 2, assert 1"),
      () -> fail("Test 2, assert 2")
    );
  }
}

Meu build.gradle.kts está assim (estou usando Gradle 8.4):

plugins {
  java
}

repositories {
  mavenCentral()
}

dependencies {
  testImplementation(platform("org.junit:junit-bom:5.10.0"))
  testImplementation("org.junit.jupiter:junit-jupiter")
}

tasks.test {
  useJUnitPlatform()

  testLogging {
    showExceptions = true
    showCauses = false
    showStackTraces = false
    exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
  }
}

E esta é a estrutura do meu projeto de teste:

project
├── build.gradle
└── src
    └── test
        └── java
            └── AppTest.java

A princípio ambos os testes rodam da mesma forma, porém, veja a saída no console quando eu executo o comando gradle test:

AppTest > usingIndividualAsserts() FAILED
    org.opentest4j.AssertionFailedError: Test 1, assert 1

AppTest > usingGroupedAsserts() FAILED
    org.gradle.internal.exceptions.DefaultMultiCauseException: Multiple Failures (2 failures)
        org.opentest4j.AssertionFailedError: Test 2, assert 1
        org.opentest4j.AssertionFailedError: Test 2, assert 2

Veja como no primeiro teste apenas a primeira falha é reportada. Na verdade, ele nem chega a executar o segundo assert, pois o teste é interrompido imediatamente.

Já no segundo teste as 2 falhas são reportadas nos dando a visão completa do que deu errado logo de cara.

Por isso, se vai usar vários asserts num mesmo teste, não deixe de agrupá-los, beleza?