Class QuarkusTestProfileAwareClassOrderer

java.lang.Object
io.quarkus.test.junit.util.QuarkusTestProfileAwareClassOrderer
All Implemented Interfaces:
org.junit.jupiter.api.ClassOrderer

public class QuarkusTestProfileAwareClassOrderer extends Object implements org.junit.jupiter.api.ClassOrderer
A ClassOrderer that orders QuarkusTest, QuarkusIntegrationTest and QuarkusMainTest classes for minimum Quarkus restarts by grouping them by their TestProfile and QuarkusTestResource annotation(s).

By default, Quarkus*Tests not using any profile come first, then classes using a profile (in groups) and then all other non-Quarkus tests (e.g. plain unit tests).
Quarkus*Tests with restricted QuarkusTestResource come after tests with profiles and Quarkus*Tests with only unrestricted resources are handled like tests without a profile (come first).

Internally, ordering is based on prefixes that are prepended to a secondary order suffix (by default the fully qualified name of the respective test class), with the fully qualified class name of the QuarkusTestProfile as an infix (if present). The default prefixes are defined by DEFAULT_ORDER_PREFIX_* and can be overridden in junit-platform.properties via CFGKEY_ORDER_PREFIX_*, e.g. non-Quarkus tests can be run first (not last) by setting CFGKEY_ORDER_PREFIX_NON_QUARKUS_TEST to 10_.

The secondary order suffix can be changed via "junit.quarkus.orderer.secondary-orderer", e.g. a value of org.junit.jupiter.api.ClassOrderer$Random will order the test classes within one group randomly instead by class name.

getCustomOrderKey(ClassDescriptor, ClassOrdererContext) can be overridden to provide a custom order number for a given test class, e.g. based on Tag or something else.

Limitations:

  • Only JUnit5 test classes are subject to ordering, e.g. ArchUnit test classes are not passed to this orderer.
  • This orderer does not handle Nested test classes.
  • Field Details

    • DEFAULT_ORDER_PREFIX_QUARKUS_TEST

      protected static final String DEFAULT_ORDER_PREFIX_QUARKUS_TEST
      See Also:
    • DEFAULT_ORDER_PREFIX_QUARKUS_TEST_WITH_PROFILE

      protected static final String DEFAULT_ORDER_PREFIX_QUARKUS_TEST_WITH_PROFILE
      See Also:
    • DEFAULT_ORDER_PREFIX_QUARKUS_TEST_WITH_RESTRICTED_RES

      protected static final String DEFAULT_ORDER_PREFIX_QUARKUS_TEST_WITH_RESTRICTED_RES
      See Also:
    • DEFAULT_ORDER_PREFIX_NON_QUARKUS_TEST

      protected static final String DEFAULT_ORDER_PREFIX_NON_QUARKUS_TEST
      See Also:
    • CFGKEY_ORDER_PREFIX_QUARKUS_TEST

      static final String CFGKEY_ORDER_PREFIX_QUARKUS_TEST
      See Also:
    • CFGKEY_ORDER_PREFIX_QUARKUS_TEST_WITH_PROFILE

      static final String CFGKEY_ORDER_PREFIX_QUARKUS_TEST_WITH_PROFILE
      See Also:
    • CFGKEY_ORDER_PREFIX_QUARKUS_TEST_WITH_RESTRICTED_RES

      static final String CFGKEY_ORDER_PREFIX_QUARKUS_TEST_WITH_RESTRICTED_RES
      See Also:
    • CFGKEY_ORDER_PREFIX_NON_QUARKUS_TEST

      static final String CFGKEY_ORDER_PREFIX_NON_QUARKUS_TEST
      See Also:
    • CFGKEY_SECONDARY_ORDERER

      static final String CFGKEY_SECONDARY_ORDERER
      See Also:
  • Constructor Details

    • QuarkusTestProfileAwareClassOrderer

      public QuarkusTestProfileAwareClassOrderer()
  • Method Details

    • orderClasses

      public void orderClasses(org.junit.jupiter.api.ClassOrdererContext context)
      Specified by:
      orderClasses in interface org.junit.jupiter.api.ClassOrderer
    • getCustomOrderKey

      @Deprecated(forRemoval=true, since="2.7.0.CR1") protected Optional<String> getCustomOrderKey(org.junit.jupiter.api.ClassDescriptor classDescriptor, org.junit.jupiter.api.ClassOrdererContext context)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Template method that provides an optional custom order key for the given classDescriptor.
      Parameters:
      classDescriptor - the respective test class
      context - for config lookup
      Returns:
      optional custom order key for the given test class
    • getCustomOrderKey

      protected Optional<String> getCustomOrderKey(org.junit.jupiter.api.ClassDescriptor classDescriptor, org.junit.jupiter.api.ClassOrdererContext context, String secondaryOrderSuffix)
      Template method that provides an optional custom order key for the given classDescriptor.
      Parameters:
      classDescriptor - the respective test class
      context - for config lookup
      secondaryOrderSuffix - the secondary order suffix that was calculated by the secondary orderer
      Returns:
      optional custom order key for the given test class