一个库,用于为您的单元测试创建完全填充的对象。
Instancio is a Java library that automatically creates and populates objects for your unit tests.
Instead of manually setting up test data:
Address address = new Address();
address.setStreet("street");
address.setCity("city");
//...
Person person = new Person();
person.setFirstName("first-name");
person.setLastName("last-name");
person.setAge(22);
person.setGender(Gender.MALE);
person.setAddress(address);
//...
You can simply do the following:
Person person = Instancio.create(Person.class);
This one-liner returns a fully-populated person, including nested objects and collections.
The object is populated with random data that can be reproduced in case of test failure.
List persons = Instancio.ofList(Person.class).size(10).create();
Stream persons = Instancio.stream(Person.class).limit(5);
Pair, List> pairOfLists = Instancio.create(new TypeToken, List>>() {});
Person person = Instancio.of(Person.class)
.generate(field(Person::getDateOfBirth), gen -> gen.temporal().localDate().past())
.generate(field(Phone::getAreaCode), gen -> gen.oneOf("604", "778"))
.generate(field(Phone::getNumber), gen -> gen.text().pattern("#d#d#d-#d#d-#d#d"))
.subtype(all(AbstractAddress.class), AddressImpl.class)
.supply(all(LocalDateTime.class), () -> LocalDateTime.now())
.onComplete(all(Person.class), (Person p) -> p.setName(p.getGender() == Gender.MALE ? "John" : "Jane"))
.create();
Model simpsons = Instancio.of(Person.class)
.set(field(Person::getLastName), "Simpson")
.set(field(Address::getCity), "Springfield")
.generate(field(Person::getAge), gen -> gen.ints().range(40, 50))
.toModel();
Person homer = Instancio.of(simpsons)
.set(field(Person::getFirstName), "Homer")
.create();
Person marge = Instancio.of(simpsons)
.set(field(Person::getFirstName), "Marge")
.create();
List person = Instancio.ofList(Person.class)
.size(10)
.applyFeed(all(Person.class), feed -> feed.ofResource("persons.csv"))
.create();
…
@ExtendWith(InstancioExtension.class)
class ExampleTest {
@Given
private List randomList;
@Test
void example1(@Given String randomSting, @Given(SomeCustomProvider.class) customString) {
//...
}
@ValueSource(strings = {"foo", "bar"})
@ParameterizedTest
void example2(String fooOrBar, @Given long randomLong) {
// ...
}
}
@ExtendWith(InstancioExtension.class)
class ExampleTest {
@RepeatedTest(100)
void example(UUID randomUuid, Foo randomFoo, @Given(BarProvider.class) Bar customBar) {
// runs the test method 100 times against generated inputs
}
}
record and sealed classes, Java 21 sequenced collections.InstancioExtension for Junit @ExtendWith.User guide (instancio.org)
Javadocs (javadoc.io)
Quickstart (github.com) sample Maven project with usage examples
git clone https://github.com/instancio/instancio-quickstart.git
If you have JUnit on the classpath, use the instancio-junit dependency.
org.instancio
instancio-junit
RELEASE
test
To use Instancio standalone, with TestNG, or other test frameworks, use instancio-core:
org.instancio
instancio-core
RELEASE
test
To better manage the different dependencies use instancio-bom:
org.instancio
instancio-bom
RELEASE
pom
import
[!CAUTION] The
org.instancio:instancioartifact on Maven central is an older dependency that should no longer be used.
Feedback and bug reports are greatly appreciated!
Please check the User Guide, previous issues and discussions before creating a new one.
If you like Instancio, please consider supporting its maintenance and development by becoming a sponsor.
A big thank you to the current project sponsors:
and individual backers:
Thanks to JetBrains for supporting this project with their open source licenses.
Available as part of the Tidelift Subscription
The maintainers of Instancio and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.
暂无开放 Issues,或尚未同步最近议题。