Instancio 是一款为单元测试自动生成和填充测试数据对象的工具。只需一行代码,它就能创建包含嵌套对象和集合在内的综合对象,从而无需手动准备测试数据。这些对象由随机数据填充,如果测试出错,这些数据可以重新生成。
据说这段代码胜过一千段文字,因此整个代码的用法如下:
您可以利用下面提供的工厂轻松生成这样一个对象:
Person person = Instancio.create(Person.class);
而不是手工做这么多:
Address address = new Address(); |
4.0 版进一步扩展了对边缘情况的处理,包括对方法赋值的增强,即使在没有相应字段的情况下,也能动态填充对象。这对具有动态属性的对象尤其有利。Java 21 还支持顺序集合,从而简化了数据操作。新引入的笛卡尔乘积生成 API 可帮助创建复杂的数据集。此外,还修改了 stream() 函数中状态生成器的操作,确保生成的对象彼此完全独立。
Instancio 还能做什么?
创建对象集合:
List<Person> persons = Instancio.ofList(Person.class).size(10).create();
创建对象流:
Stream<Person> persons = Instancio.stream(Person.class).limit(5);
创建泛型类型:
Pair<List<Foo>, List<Bar>> pairOfLists = Instancio.create(new TypeToken<Pair<List<Foo>, List<Bar>>>() {});
自定义生成的值:
Person person = Instancio.of(Person.class) |
创建可重用的对象模板(模型):
Model<Person> simpsons = Instancio.of(Person.class) |
主要特点
- 测试失败时数据可完全重现。
- 支持泛型、record类sealed、Java 21 排序集合。
- 支持定义自定义生成器。
- 支持基于 Bean Validation 注解生成数据。
- 灵活的配置选项。
- InstancioExtension对于 Junit 5 @ExtendWith。
- 通过模块支持 Guava instancio-guava(实验性)
- 通过模块支持基于属性的测试instancio-quickcheck(实验性)