Annotation Interface GeneratorsSource
@Target(METHOD)
@Retention(RUNTIME)
@Documented
@ArgumentsSource(GeneratorsSourceArgumentsProvider.class)
public @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 -
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionintNumber of instances to generate.Upper bound for number-based generators.Lower bound for number-based generators.intMaximum size for String-based generators.intMinimum size for String-based generators.
-
Element Details
-
generator
The generator type to use fromGenerators.Select a generator from the
GeneratorTypeenum, 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 minSizeMinimum 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 maxSizeMaximum 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 countNumber 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
-