源码地址:GitHub - jsonzou/jmockdata: The plugin to mock the java data by random.
1.简介
Jmockdata是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。
特性:
支持丰富多样的数据类型模拟,包括:Java基本类型、字符串、枚举、日期、数组、多维数组、集合[List|Set|Map]、枚举、Java对象等
支持通过正则表达式反向模拟数据
支持泛型
支持继承
支持循环依赖、自依赖(手动开启enabledCircle)
支持忽略字段
支持改变mockConfig来自定义模拟数据策略
支持自定义Mocker类扩展数据模拟类型
支持添加BeanMocker拦截器类改变模拟行为
支持JDK1.8+
2.使用
引入依赖
<dependency> <groupId>com.github.jsonzou</groupId> <artifactId>jmockdata</artifactId> <version> 4.3 . 0 </version> </dependency> |
使用语法:
1.基础类型mock
支持以下基础类型直接模拟
描述 | 类型 |
---|
基础类型 | byte boolean char short int long float double |
包装类型包装 | Byte Boolean Character Short Integer Long Float Double |
常用类型 | BigDecimal BigInteger Date LocalDateTime LocalDate LocalTime java.sql.Timestamp String Enum |
多维数组 | 以上所有类型的多维数组 如:int[] int[][] int[][][] .... etc. |
//基本类型模拟 int intNum = JMockData.mock( int . class ); int [] intArray = JMockData.mock( int []. class ); Integer integer = JMockData.mock(Integer. class ); Integer[] integerArray = JMockData.mock(Integer[]. class ); //常用类型模拟 BigDecimal bigDecimal = JMockData.mock(BigDecimal. class ); BigInteger bigInteger = JMockData.mock(BigInteger. class ); Date date = JMockData.mock(Date. class ); String str = JMockData.mock(String. class ); |
2.Java对象mock
模拟bean,被模拟的数据最好是plain bean,通过反射给属性赋值。
支持模拟继承而来的属性。
@Data public class Person { private String name; private Integer age; private String email; } public static void main(String[] args) { Person person= JMockData.mock(Person. class ); System.out.println(JSON.toJSONString(person)); } |
3.容器类型(LIST,SET,MAP)mock
@Test //******注意TypeReference要加{}才能模拟****** public void testTypeRefrence() { //模拟基础类型,不建议使用这种方式,参考基础类型章节直接模拟。 Integer integerNum = JMockData.mock( new TypeReference<Integer>(){}); Integer[] integerArray = JMockData.mock( new TypeReference<Integer[]>(){}); //模拟集合 List<Integer> integerList = JMockData.mock( new TypeReference<List<Integer>>(){}); //模拟数组集合 List<Integer[]> integerArrayList = JMockData.mock( new TypeReference<List<Integer[]>>(){}); //模拟集合数组 List<Integer>[] integerListArray = JMockData.mock( new TypeReference<List<Integer>[]>(){}); //模拟集合实体 List<BasicBean> basicBeanList = JMockData.mock( new TypeReference<List<BasicBean>>(){}); //各种组合忽略。。。。map同理。下面模拟一个不知道什么类型的map Map<List<Map<Integer, String[][]>>, Map<Set<String>, Double[]>> some = JMockData.mock( new TypeReference<Map<List<Map<Integer, String[][]>>, Map<Set<String>, Double[]>>>(){}); } |
4.mock支持自定义配置
@Data public class Person { private String name; private Integer age; private String email; } public static void main(String[] args) { //基础类型数据mock配置 MockConfig mockConfig = new MockConfig().intRange( 1 , 10 ).globalConfig(); int id =JMockData.mock( int . class , mockConfig); //java对象类型数据mock配置 MockConfig mockConfig = new MockConfig() .subConfig( "age" ) // 设置 int 的范围 .intRange( 1 , 100 ) .subConfig( "email" ) // 设置生成邮箱正则 .stringRegex( "[a-z0-9]{5,15}\\@\\w{3,5}\\.[a-z]{2,3}" ) // 全局配置(还可以根据条件配置.subConfig) .globalConfig(); Person person = JMockData.mock(Person. class , mockConfig); } |