@ParameterizedTest(name = "{displayName}({arguments})")
    @ValueSource(classes = {ATestClass.class, ATestSubclass.class})
    public void describesEachParameterizedTestWithCategoryAnnotationFromMethod(Class<?> testClass)
        throws InitializationError {
      List<Description> childDescriptions = new GeodeParamsRunner(testClass)
          .getDescription()
          .getChildren();

      List<Method> parameterizedTestMethods = parameterizedTestMethodsOf(testClass);
      SoftAssertions softly = new SoftAssertions();
      parameterizedTestMethods.forEach(method -> {
        String methodName = method.getName();
        Description suiteDescription = findByDisplayName(childDescriptions, methodName);
        softly.assertThat(suiteDescription)
            .as("suite description for parameterized method " + methodName)
            .isNotNull();
        if (isNull(suiteDescription)) {
          return;
        }

        // The suite description contains one test description for each parameterization. Each test
        // description must have the same Category annotation as the method.
        suiteDescription.getChildren().forEach(
            testDescription -> softly.assertThat(testDescription.getAnnotation(Category.class))
                .as("Category annotation on test description " + testDescription)
                .isEqualTo(method.getAnnotation(Category.class)));
      });
      softly.assertAll();
    }
Compares the parameterized test suites produced by {@code GeodeParamsRunner} to those
produced by {@code JUnitParamsRunner}, comparing every detail except the annotations on
the parameterized test descriptions. A separate test verifies those annotations.
geode-junit/src/test/java/org/apache/geode/test/junit/runners/GeodeParamsRunnerTest.java