Class 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.
    • Constructor Detail

      • QuarkusTestProfileAwareClassOrderer

        public QuarkusTestProfileAwareClassOrderer()
    • Method Detail

      • 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