Annotation Interface GeneratorsSource


@GeneratorsSource is a variant of TypeGeneratorFactorySource that always uses Generators as the factory class for creating TypedGenerator instances for parameterized tests.

This annotation simplifies the use of the Generators utility class by eliminating the need to specify the factory class. You only need to provide the generator type from the GeneratorType enum and any required parameters specific to the generator type.

Generator Types

The GeneratorType enum provides access to all available generators, categorized as:

  • String generators (e.g., NON_EMPTY_STRINGS, STRINGS, LETTER_STRINGS)
  • Boolean generators (e.g., BOOLEANS, BOOLEAN_OBJECTS)
  • Number generators (e.g., INTEGERS, DOUBLES, LONGS)
  • Date and time generators (e.g., DATES, LOCAL_DATES, ZONED_DATE_TIMES)
  • Other generators (e.g., CLASS_TYPES, LOCALES, URLS)
  • Domain-specific generators (e.g., DOMAIN_EMAIL, DOMAIN_PERSON, DOMAIN_UUID)

Parameter Types

Generators have different parameter requirements:

  • PARAMETERLESS: No additional parameters needed
  • NEEDS_BOUNDS: Requires minSize and maxSize for string length
  • NEEDS_RANGE: Requires low and high for numeric ranges

Example Usage

 
 // Parameterless generator
 @ParameterizedTest
 @GeneratorsSource(
     generator = GeneratorType.NON_EMPTY_STRINGS,
     count = 5
 )
 void testWithGeneratedStrings(String value) {
     assertNotNull(value);
     assertFalse(value.isEmpty());
 }
 
 // String generator with bounds
 @ParameterizedTest
 @GeneratorsSource(
     generator = GeneratorType.STRINGS,
     minSize = 3,
     maxSize = 10,
     count = 10
 )
 void testWithStringParameters(String value) {
     assertNotNull(value);
     assertTrue(value.length() >= 3 && value.length() <= 10);
 }
 
 // Number generator with range
 @ParameterizedTest
 @GeneratorsSource(
     generator = GeneratorType.INTEGERS,
     low = "1",
     high = "100",
     count = 10
 )
 void testWithNumberParameters(Integer value) {
     assertNotNull(value);
     assertTrue(value >= 1 && value <= 100);
 }
 
 // Domain-specific generator
 @ParameterizedTest
 @GeneratorsSource(
     generator = GeneratorType.DOMAIN_EMAIL,
     count = 3
 )
 void testWithEmailAddresses(String value) {
     assertNotNull(value);
     assertTrue(value.contains("@"));
 }
 
 // With specific seed for reproducible tests
 @ParameterizedTest
 @GeneratorsSource(
     generator = GeneratorType.STRINGS,
     minSize = 3,
     maxSize = 10,
     seed = 42L,
     count = 3
 )
 void testWithSpecificSeed(String value) {
     // This test will always generate the same values
     assertNotNull(value);
 }
 
 
Since:
2.0
Author:
Oliver Wolff
See Also:
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    The generator type to use from Generators.
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    int
    Number of instances to generate.
    Upper bound for number-based generators.
    Lower bound for number-based generators.
    int
    Maximum size for String-based generators.
    int
    Minimum size for String-based generators.
  • Element Details

    • generator

      The generator type to use from Generators.

      Select a generator from the GeneratorType enum, which includes:

      • String generators: NON_EMPTY_STRINGS, STRINGS, LETTER_STRINGS, etc.
      • Number generators: INTEGERS, DOUBLES, LONGS, etc.
      • Date/time generators: LOCAL_DATES, ZONED_DATE_TIMES, etc.
      • Domain-specific generators: DOMAIN_EMAIL, DOMAIN_PERSON, etc.
      • Other generators: BOOLEANS, URLS, LOCALES, etc.
      Returns:
      the generator type
    • minSize

      int minSize
      Minimum size for String-based generators. Only applicable for String generators with parameter type NEEDS_BOUNDS (e.g., STRINGS, LETTER_STRINGS).
      Returns:
      the minimum size for strings
      Default:
      0
    • maxSize

      int maxSize
      Maximum size for String-based generators. Only applicable for String generators with parameter type NEEDS_BOUNDS (e.g., STRINGS, LETTER_STRINGS).
      Returns:
      the maximum size for strings
      Default:
      10
    • low

      Lower bound for number-based generators. Only applicable for number generators with parameter type NEEDS_RANGE (e.g., INTEGERS, DOUBLES, LONGS, FLOATS). The value is parsed according to the generator's number type.
      Returns:
      the lower bound as a string
      Default:
      "0"
    • high

      Upper bound for number-based generators. Only applicable for number generators with parameter type NEEDS_RANGE (e.g., INTEGERS, DOUBLES, LONGS, FLOATS). The value is parsed according to the generator's number type.
      Returns:
      the upper bound as a string
      Default:
      "100"
    • count

      int count
      Number of instances to generate. This controls how many test invocations will occur with different generated values.
      Returns:
      the number of instances to generate, defaults to 1
      Default:
      1