Package org.instancio

Interface InstancioApi<T>

Type Parameters:
T - type being created
All Known Subinterfaces:
InstancioOfClassApi<T>
All Known Implementing Classes:
ClassInstancioApiImpl, InstancioApiImpl

public interface InstancioApi<T>
Instancio API for generating instances of a class populated with random data.
Since:
1.0.1
  • Method Details

    • create

      T create()
      Creates a new instance of a class and populates it with data.

      Example:

      
           Person person = Instancio.of(Person.class).create();
       

      The returned object will have all its fields populated with random data, including collection and array fields.

      Returns:
      a fully populated object
      Since:
      1.0.1
    • asResult

      Result<T> asResult()
      Returns a Result containing the created object and seed value used to generate its values. The seed value can be used to reproduce the same object again.
      Returns:
      result containing the created object
      Since:
      1.5.1
    • stream

      Stream<T> stream()
      Creates an infinite stream of distinct, fully populated objects.

      Example:

      
           List<Person> persons = Instancio.of(Person.class)
               .stream()
               .limit(5)
               .collect(Collectors.toList());
       
      Returns:
      an infinite stream of distinct, populated objects
      Since:
      1.1.9
    • toModel

      Model<T> toModel()
      Creates a model containing all the information for populating a class.

      The model can be useful when class population needs to be customised and the customisations need to be re-used in different parts of the code.

      Example:

      
           Model<Person> personModel = Instancio.of(Person.class)
                   .supply(field("fullName"), () -> "Jane Doe")
                   .toModel();
      
           // Re-use the model to create instances of Person class
           // without duplicating the model's details
           Person person = Instancio.of(personModel).create();
       

      Since the internal data of the model is not part of the public API, the Model interface does not contain any methods.

      Returns:
      a model containing all the details
      Since:
      1.0.1
    • ignore

      InstancioApi<T> ignore(TargetSelector selector)
      Specifies that a class or field should be ignored.

      Example:

      
           Person person = Instancio.of(Person.class)
                   .ignore(field("pets"))  // Person.pets field
                   .ignore(field(Address.class, "phoneNumbers")) // Address.phoneNumbers field
                   .ignore(allStrings())
                   .create();
       

      will create a fully populated person, but will ignore the address field and all string fields.

      Parameters:
      selector - for fields and/or classes this method should be applied to
      Returns:
      API builder reference
    • withNullable

      InstancioApi<T> withNullable(TargetSelector selector)
      Specifies that a field or class is nullable. By default, Instancio assigns non-null values. If marked as nullable, Instancio will randomly assign either a null or non-null value to fields of this type.

      Example:

      
           Person person = Instancio.of(Person.class)
                   .withNullable(allStrings())
                   .withNullable(field(Address.class))
                   .create();
       
      Parameters:
      selector - for fields and/or classes this method should be applied to
      Returns:
      API builder reference
    • set

      <V> InstancioApi<T> set(TargetSelector selector, @Nullable V value)
      Sets a value for a field or class.

      Example: if a Person has a List<PhoneNumber>, the following will set all generated phone numbers' country codes to "+1".

      
           Person person = Instancio.of(Person.class)
                   .supply(field(PhoneNumber.class, "phoneNumbers"), "+1")
                   .create();
       

      For supplying random values, see supply(TargetSelector, Generator).

      Type Parameters:
      V - type of the value
      Parameters:
      selector - for fields and/or classes this method should be applied to
      value - value to set
      Returns:
      API builder reference
      See Also:
    • supply

      <V> InstancioApi<T> supply(TargetSelector selector, Supplier<V> supplier)
      Supplies a non-random value for a field or class using a Supplier.

      Example:

      
           Person person = Instancio.of(Person.class)
                   .supply(all(LocalDateTime.class), () -> LocalDateTime.now()) // set all dates to current time
                   .supply(field("fullName"), () -> "Homer Simpson") // set Person.fullName
                   .supply(field(Address.class, "phoneNumbers"), () -> List.of( // set Address.phoneNumbers
                       new PhoneNumber("+1", "123-45-67"),
                       new PhoneNumber("+1", "345-67-89")))
                   .create();
       

      Note: Instancio will not modify the supplied instance in any way. If the PhoneNumber class has other fields, they will be ignored.

      For supplying random values, see supply(TargetSelector, Generator).

      Type Parameters:
      V - type of the value to generate
      Parameters:
      selector - for fields and/or classes this method should be applied to
      supplier - providing the value for given selector
      Returns:
      API builder reference
      See Also:
    • supply

      <V> InstancioApi<T> supply(TargetSelector selector, Generator<V> generator)
      Supplies a randomised value for a field or class using a custom Generator.

      Example:

      
           Person person = Instancio.of(Person.class)
                   .supply(field(Address.class, "phoneNumbers"), random -> List.of(
                           // Generate phone numbers with a random country code, either US or Mexico
                           new PhoneNumber(random.from("+1", "+52"), "123-55-66"),
                           new PhoneNumber(random.from("+1", "+52"), "123-77-88")))
                   .create();
       

      Note: Instancio will not modify the supplied instance in any way. If the PhoneNumber class has other fields, they will be ignored.

      Type Parameters:
      V - type of the value to generate
      Parameters:
      selector - for fields and/or classes this method should be applied to
      generator - that will provide the values
      Returns:
      API builder reference
    • generate

      <V, S extends GeneratorSpec<V>> InstancioApi<T> generate(TargetSelector selector, Function<Generators,S> gen)
      Generates a random value for a field or class using a built-in generator.

      Example:

      
           Person person = Instancio.of(Person.class)
                   .generate(field("age"), gen -> gen.ints().min(18).max(100))
                   .generate(field("name"), gen -> gen.string().min(5).allowEmpty())
                   .generate(field(Address.class, "phoneNumbers"), gen -> gen.collection().minSize(5))
                   .generate(field(Address.class, "city"), gen -> gen.oneOf("Burnaby", "Vancouver", "Richmond"))
                   .create();
       
      Type Parameters:
      V - type of the value to generate
      S - generator spec type
      Parameters:
      selector - for fields and/or classes this method should be applied to
      gen - provider of built-in generators
      Returns:
      API builder reference
    • onComplete

      <V> InstancioApi<T> onComplete(TargetSelector selector, OnCompleteCallback<V> callback)
      A callback that gets invoked after an object has been fully populated.

      Example:

      
           // Sets countryCode field on all instances of Phone to the specified value
           Person person = Instancio.of(Person.class)
                   .onComplete(all(Phone.class), (Phone phone) -> phone.setCountryCode("+1"))
                   .create();
       
      Type Parameters:
      V - type of object handled by the callback
      Parameters:
      selector - for fields and/or classes this method should be applied to
      callback - to invoke after object has been populated
      Returns:
      API builder reference
      Since:
      1.0.4
    • subtype

      InstancioApi<T> subtype(TargetSelector selector, Class<?> subtype)
      Maps target field or class to the given subtype. This can be used in the following cases:
      1. to specify an implementation for interfaces or abstract classes
      2. to override default implementations used by Instancio
      Specify an implementation for an abstract type

      When Instancio encounters an interface or an abstract type it is not aware of (for example, that is not part of the JDK), it will not be able to instantiate it. This method can be used to specify an implementation to use in such cases. For example:

      
           WidgetContainer container = Instancio.of(WidgetContainer.class)
                   .subtype(all(AbstractWidget.class), ConcreteWidget.class)
                   .create();
       

      Override default implementations

      By default, Instancio uses certain defaults for collection classes, for example ArrayList for List. If an alternative implementation is required, this method allows to specify it:

      
           Person person = Instancio.of(Person.class)
                   .subtype(all(List.class), LinkedList.class)
                   .create();
       

      will use the LinkedList implementation for all Lists.

      Parameters:
      selector - for fields and/or classes this method should be applied to
      subtype - to map the selector to
      Returns:
      API builder reference
      Since:
      1.4.0
    • withSettings

      InstancioApi<T> withSettings(Settings settings)
      Override default settings for generated values. Settings include collection sizes, string lengths, numeric ranges, etc.
      Parameters:
      settings - to use
      Returns:
      API builder reference
      Since:
      1.0.1
    • withSeed

      InstancioApi<T> withSeed(long seed)
      Sets the seed value for the random number generator. If the seed is not specified, a random seed will be used. Specifying the seed is useful for reproducing test results. By specifying the seed value, the same random data will be generated again.

      Example:

      
           // Generates a different UUID each time
           UUID result = Instancio.create(UUID.class);
      
           // Generates the same UUID each time
           UUID result = Instancio.of(UUID.class)
                   .withSeed(1234)
                   .create();
       
      Parameters:
      seed - for the random number generator
      Returns:
      API builder reference
      Since:
      1.0.1
    • lenient

      InstancioApi<T> lenient()
      Disables strict mode in which unused selectors trigger an error. In lenient mode unused selectors are simply ignored.

      This method is a shorthand for:

      
           Example example = Instancio.of(Example.class)
               .withSettings(Settings.create().set(Keys.MODE, Mode.LENIENT))
               .create();
       
      Returns:
      API builder reference
      Since:
      1.4.1