Testing oriented random value generators.
Usage
The library can be used in two usage scenarios.
Random values generation for testing purposes
To use random value generation in project tests add the dependency in test scope to the project.
<project ...>
...
<dependency>
<groupId>dev.orne.test</groupId>
<artifactId>generators</artifactId>
<version>0.2.0</version>
<scope>test</scope>
</dependency>
...
</project>
Warning: The library uses pseudorandom number generators (PRNGs) and must not be used for security-sensitive tasks.
The most basic usage requires only passing the value type to the
Generators.randomValue() method:
Year year = Generators.randomValue(Year.class);
assertNotNull(year);
Alternatively, @Random annotation can be used in JUnit 5 tests' fields and
parameters using the
supported validation annotations
as generation parameters:
@Test
void testSomething(@NotNull @Random Year year) {
assertNotNull(year);
}
For more advanced use cases see the ‘Test values generation’ article.
Provide new generator implementations
To provide support for new random value types generation add the dependency as optional to the project.
<project ...>
...
<dependency>
<groupId>dev.orne.test</groupId>
<artifactId>generators</artifactId>
<version>0.2.0</version>
<optional>true</optional>
</dependency>
...
</project>
See the ‘Provide new generators’ article for implementation details.
Features
The library provides the following features:
- SPI generators discovery
- Annotation based generators ordering
- Generators
- Typed generators
- Parameterizable generators
- Generic classes generation support
- Java Validation 2.1 based parameters extractors
NotNullextractorSizeextractorMinextractorMaxextractor
- Parameterizable typed generators
- Targeted generators
- Property type generator
- Method argument type generator
- Method return type generator
- Constructor argument type generator
- Constructor based generator
- Factory method based generator
- Primitives and wrapper types generators
java.lang.Booleangeneratorjava.lang.Bytegeneratorjava.lang.Shortgeneratorjava.lang.Integergeneratorjava.lang.Longgeneratorjava.lang.Floatgeneratorjava.lang.Doublegeneratorjava.lang.Charactergenerator
- Common types generators
java.lang.CharSequencegeneratorjava.lang.Numbergeneratorjava.lang.Stringgeneratorjava.io.Filegeneratorjava.math.BigIntegergeneratorjava.math.BigDecimalgeneratorjava.nio.charset.Charsetgeneratorjava.nio.file.Pathgeneratorjava.util.Calendargeneratorjava.util.Currencygeneratorjava.util.Dategeneratorjava.util.Localegeneratorjava.util.TimeZonegeneratorjava.util.URIgeneratorjava.util.URLgeneratorjava.util.UUIDgeneratorjava.time.Clockgeneratorjava.time.Durationgeneratorjava.time.Instantgeneratorjava.time.LocalDategeneratorjava.time.LocalDateTimegeneratorjava.time.LocalTimegeneratorjava.time.MonthDaygeneratorjava.time.OffsetDateTimegeneratorjava.time.OffsetTimegeneratorjava.time.Periodgeneratorjava.time.Yeargeneratorjava.time.YearMonthgeneratorjava.time.ZonedDateTimegeneratorjava.time.ZoneIdgeneratorjava.time.ZoneOffsetgeneratorjava.time.chrono.Chronologygenerator
- Arrays and collections generators
java.lang.Arraygeneratorjava.util.Collectiongeneratorjava.util.Listgeneratorjava.util.Setgeneratorjava.util.Mapgenerator
- General generators
- Enumerations generator
- Annotated constructor based bean generator
- Annotated method based bean generator
- JUnit 5 extension
- Annotation based test values generation
