Разные aftereach для разных тестовых случаев

Вопрос заключается вот в чём, можно ли для разных тестовых случаем сделать разную обработку AfterEach в одном классе?

можно конечно
пишете case/if else по желанию в AfterEach
переменную класса/ энам присваивается в тесте
соответственно в AfterEach будет исполняться нужный блок

топорно и не безопасно но можно

Спасибо

Можно сделать через внутренние классы, условные операторы по имени/тегу и т.п.
Ещё в 4-м Junit’е было можно через механизм @RunWith(Enclosed.class) сделать что-то подобное с вложенными классами.

Вот тут накидал примерчик небольшой, дальше под себя можете подрихтовать:

import org.junit.jupiter.api.*;

class NestedJupiterTest {

  {
    System.out.println("==========================");
  }

  @BeforeEach
  void beforeAll() {
      System.out.println("real before all");
  }

  @BeforeEach
  void setupClear(TestInfo info) {
    if (info.getTags().contains("Clear")) {
      System.out.println("before clear");
    }
  }

  @BeforeEach
  void setupClose(TestInfo info) {
    if (info.getTags().contains("Close")) {
      System.out.println("before close");
    }
  }

  @Test
  @Tag(value = "All")
  @Tag(value = "Clear")
  @DisplayName(value = "testClear")
  void testClear(TestInfo info) {
    System.out.println(">>>> " + info.getDisplayName());
  }

  @Test
  @Tag(value = "All")
  @Tag(value = "Close")
  @DisplayName(value = "testClose")
  void testClose(TestInfo info) {
    System.out.println(">>>> " + info.getDisplayName());
  }

  @AfterEach
  void afterTagAll(TestInfo info) {
    if (info.getTags().contains("All")) {
      System.out.println("after tag All");
    }
  }

  @AfterEach
  void afterAll() {
      System.out.println("real after all");
  }

  @AfterEach
  void clear(TestInfo info) {
    if (info.getTags().contains("Clear")) {
      System.out.println("after tag Clear");
    }
  }

  @AfterEach
  void close(TestInfo info) {
    if (info.getTags().contains("Close")) {
      System.out.println("after tag Close");
    }
  }

  @Nested
  class InnerClass {

    @BeforeEach
    void beforeInner() {
      System.out.println("before Nested");
    }

    @Test
    @Tag(value = "Nested")
    @DisplayName(value = "testInner")
    void testInner(TestInfo info) {
      System.out.println(info.getDisplayName());
    }

    @AfterEach
    void afterInner() {
      System.out.println("after Nested");
    }
  }
}

В Junit5 есть расширения, как раз подходящие для такого использования.
Вот тут хорошо расписано , в параграфе 4.3 Lifecycle Callbacks

А можно как-то передавать параметры при вызове таким способом?

А чем это сильно лучше, чем определять внутри @AfterEach?

Я вообще не очень понимаю зачем разные методы @AfterEach для разных тестов выполнять. Самое простое решение внутренние классы - @Nested. Они видят все поля и методы внешнего класса и имеют свои before/after методы, которые не видны снаружи и запускаются независимо для каждого внутреннего класса.

Значит я ещё не постиг всех тонкостей JUnit 5) Спасибо за информацию)