Package org.instancio
Class Instancio
java.lang.Object
org.instancio.Instancio
Instancio API for creating instances of a class.
Allow
Default behaviour is to populate every field with a non-null, random value.
Specifying nullable will randomly generate either Creating instances of a class from a
Class specifications can also be saved as a Option 1: using a
Option 2: using
Usage
Create and populate an instance of a class
Returns an object fully populated with random data with non-null values.
Person person = Instancio.create(Person.class);
Customise object's values
Returns an object populated with random data and some specified fields' values customised.
Person person = Instancio.of(Person.class)
.set(field("fullName"), "Homer Simpson") // Person.fullName
.supply(all(LocalDateTime.class), () -> LocalDateTime.now())
.generate(field(Phone.class, "number"), gen -> gen.text().pattern("(#d#d#d) #d#d#d-#d#d#d#d"))
.create();
Allow null
values to be generated
Default behaviour is to populate every field with a non-null, random value.
Specifying nullable will randomly generate either null
or an actual value.
Person person = Instancio.of(Person.class)
.withNullable(field("gender")) // Person.gender is nullable
.withNullable(field(Address.class, "street")) // Address.street is nullable
.withNullable(all(Date.class)) // all dates are nullable
.create();
Ignore certain fields or classes
Ignored fields will not be populated. Their values will benull
(unless they have a default value assigned).
Person person = Instancio.of(Person.class)
.ignore(field("age"))
.ignore(field(Address.class, "city"))
.ignore(all(Date.class))
.create();
Creating instances of a class from a Model
Class specifications can also be saved as a Model
using the toModel()
method.
Then instances of a class can be generated from the model. Models can be useful for:
- reducing code duplication by re-using the same model in different parts of the code
- acting as a prototype for creating specialised instances of a class by overriding model specifications
// Create a model
Model<Person> simpsons = Instancio.of(Person.class)
.supply(all(Address.class), () -> new Address("742 Evergreen Terrace", "Springfield", "US"))
.supply(field("pets"), () -> List.of(
new Pet(PetType.CAT, "Snowball"),
new Pet(PetType.DOG, "Santa's Little Helper"))
//... other specs
.toModel();
// Use the above model as is
Person person = Instancio.of(simpsons).create();
// Use the model but override the name
Person homer = Instancio.of(simpsons).set(field("name"), "Homer").create();
Person marge = Instancio.of(simpsons).set(field("name"), "Marge").create();
// A model can also used to create another model.
// This snippet creates a new model from the original model to include a new pet.
Model<Person> withNewPet = Instancio.of(simpsons)
.supply(field("pets"), () -> List.of(
new Pet(PetType.PIG, "Plopper"),
new Pet(PetType.CAT, "Snowball"),
new Pet(PetType.DOG, "Santa's Little Helper"))
.toModel();
Creating generic classes
There are two ways to create generic class instances.Option 1: using a TypeToken
List<Person> person = Instancio.create(new TypeToken<List<Person>>() {}); // note the empty '{}' braces
Option 2: using withTypeParameters
to specify generic type arguments
List<Person> person = Instancio.of(List.class).withTypeParameters(Person.class).create();
Note: the second approach will produce an "unchecked assignment" warning.
- Since:
- 1.0.1
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> T
Creates a fully-populated instance of given class.static <T> T
Creates a populated instance of a class represented by the given model.static <T> T
create
(TypeTokenSupplier<T> typeToken) Creates a fully-populated instance of type specified in the type token.static <T> InstancioOfClassApi<T>
Builder version ofcreate(Class)
that allows customisation of generated values.static <T> InstancioApi<T>
Builder version ofcreate(Model)
that allows overriding of generation parameters of an existing model.static <T> InstancioApi<T>
of
(TypeTokenSupplier<T> typeToken) Builder version ofcreate(TypeTokenSupplier)
that allows customisation of generated values.static <T> InstancioOfCollectionApi<List<T>>
Builder API for generating aList
that allows customisation of generated values.static <K,
V> InstancioOfCollectionApi<Map<K, V>> Builder API for generating aMap
that allowss customisation of generated values.static <T> InstancioOfCollectionApi<Set<T>>
Builder API for generating aSet
that allows customisation of generated values.static <T> Stream<T>
Creates an infinite stream of distinct, fully populated instances of given class.static <T> Stream<T>
stream
(TypeTokenSupplier<T> typeToken) Creates an infinite stream of distinct, fully populated instances of type specified in the type token.
-
Method Details
-
create
Creates a fully-populated instance of given class.- Type Parameters:
T
- type- Parameters:
type
- to create- Returns:
- a fully-populated instance
- Since:
- 1.0.1
-
stream
Creates an infinite stream of distinct, fully populated instances of given class.Example:
List<Person> persons = Instancio.stream(Person.class) .limit(5) .collect(Collectors.toList());
- Type Parameters:
T
- type- Parameters:
type
- to create- Returns:
- an infinite stream of distinct, fully populated instances
- Since:
- 1.1.9
-
create
Creates a fully-populated instance of type specified in the type token. This method can be used to create generic classes.Example:
List<Person> persons = Instancio.of(new TypeToken<List<Person>>(){}).create()
- Type Parameters:
T
- type- Parameters:
typeToken
- specifying the type to create- Returns:
- a fully-populated instance
-
stream
Creates an infinite stream of distinct, fully populated instances of type specified in the type token.Example:
List<Pair<Integer, String>> pairs = Instancio.stream(new TypeToken<Pair<Integer, String>>() {}) .limit(5) .collect(Collectors.toList());
- Type Parameters:
T
- type- Parameters:
typeToken
- specifying the type to create- Returns:
- an infinite stream of distinct, fully populated instances
- Since:
- 1.1.9
-
create
Creates a populated instance of a class represented by the given model.See the
Model
class on how to create models.- Type Parameters:
T
- type- Parameters:
model
- specifying generation parameters of the object to create- Returns:
- a populated instance
- See Also:
-
of
Builder version ofcreate(Class)
that allows customisation of generated values.Person person = Instancio.of(Person.class) .generate(allInts(), gen -> gen.ints().min(1).max(99)) .supply(all(Address.class), () -> new Address("742 Evergreen Terrace", "Springfield", "US")) .supply(field("pets"), () -> List.of( new Pet(PetType.CAT, "Snowball"), new Pet(PetType.DOG, "Santa's Little Helper"))) .create();
- Type Parameters:
T
- type- Parameters:
type
- to create- Returns:
- API builder reference
-
of
Builder version ofcreate(TypeTokenSupplier)
that allows customisation of generated values.List<Person> persons = Instancio.of(new TypeToken<List<Person>>(){}) .generate(allInts(), gen -> gen.ints().min(1).max(99)) .supply(all(Address.class), () -> new Address("742 Evergreen Terrace", "Springfield", "US")) .supply(field("pets"), () -> List.of( new Pet(PetType.CAT, "Snowball"), new Pet(PetType.DOG, "Santa's Little Helper"))) .create();
- Type Parameters:
T
- type- Parameters:
typeToken
- specifying the type to create- Returns:
- API builder reference
-
of
Builder version ofcreate(Model)
that allows overriding of generation parameters of an existing model.Model<Person> personModel = Instancio.of(Person.class) .generate(allInts(), gen -> gen.ints().min(1).max(99)) .supply(all(Address.class), () -> new Address("742 Evergreen Terrace", "Springfield", "US")) .supply(field("pets"), () -> List.of( new Pet(PetType.CAT, "Snowball"), new Pet(PetType.DOG, "Santa's Little Helper"))) .toModel(); // Use the existing model and add/override generation parameters Person simpsonKid = Instancio.of(personModel) .generate(field("fullName"), gen -> gen.oneOf("Lisa Simpson", "Bart Simpson")) .create();
- Type Parameters:
T
- type- Parameters:
model
- specifying generation parameters of the object to create- Returns:
- API builder reference
-
ofList
Builder API for generating aList
that allows customisation of generated values.- Type Parameters:
T
- element type- Parameters:
elementType
- class to generate as list elements- Returns:
- API builder reference
- Since:
- 2.0.0
-
ofSet
Builder API for generating aSet
that allows customisation of generated values.- Type Parameters:
T
- element type- Parameters:
elementType
- class to generate as set elements- Returns:
- API builder reference
- Since:
- 2.0.0
-
ofMap
Builder API for generating aMap
that allowss customisation of generated values.- Type Parameters:
K
- key typeV
- value type- Parameters:
keyType
- class to generate as map keysvalueType
- class to generate as map values- Returns:
- API builder reference
- Since:
- 2.0.0
-