java泛型波浪号_Jmockdata3.x 全新发布,使用说明

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。

820db4c97a724ee6d0122694e8e594b5.png

The plugin of Jmockdata what through random algorithm mock java data.

Jmockdata插件通过随机算法模拟Java数据.

eea31b0a4734fdb1fb161ce8579f2cfa.png

Feature

支持丰富多样的数据类型模拟,包括:Java基本类型、字符串、枚举、日期、数组、多维数组、集合[List|Set|Map]、Java对象等

支持泛型

支持继承

支持循环依赖、自依赖

支持改变mockConfig来自定义模拟数据策略

支持JDK1.7+,无任何第三方依赖

Download

Jmockdata-3.0.1

Jar

Maven

com.github.jsonzou

jmockdata

3.0.1

Gradle

compile group: 'com.github.jsonzou', name: 'jmockdata', version: '3.0.1'

Jmockdata-3.0.0

Jar

Maven

com.github.jsonzou

jmockdata

3.0.0

Gradle

compile group: 'com.github.jsonzou', name: 'jmockdata', version: '3.0.0'

Usage

基础类型

支持以下基础类型直接模拟

描述

类型

基础类型

byte boolean char short int long float double

包装类型包装

Byte Boolean Character Short Integer Long Float Double

基础类型数组

byte[] boolean[] char[] short[] int[] long[] float[] double[]

包装类型数组

Byte[] Boolean[] Character[] Short[] Integer[] Long[] Float[] Double[]

常用类型

BigDecimal BigInteger Date String

常用类型数组

BigDecimal[] BigInteger[] Date[] String[]

二维数组

以上所有基础类型的二维数组

//基本类型模拟

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);

JAVA对象

模拟bean,被模拟的数据必须是plain bean,底层采用了java自带的内省方法来获取字段和对应的setter方法。

支持模拟继承而来的属性。

//模拟Java对象

public class BasicBean {

//基本类型

private byte byteNum;

private boolean booleanNum;

private char charNum;

private short shortNum;

private int integerNum;

private long longNum;

private float floatNum;

private double doubleNum;

//基本包装类型

private Byte byteBoxing;

private Boolean booleanBoxing;

private Character charBoxing;

private Short shortBoxing;

private Integer integerBoxing;

private Long longBoxing;

private Float floatBoxing;

private Double doubleBoxing;

//基本类型数组

private byte[] byteNumArray;

private boolean[] booleanNumArray;

private char[] charNumArray;

private short[] shortNumArray;

private int[] integerNumArray;

private long[] longNumArray;

private float[] floatNumArray;

private double[] doubleNumArray;

//基本类型二维数组

private byte[][] byteNumDoubleArray;

private boolean[][] booleanNumDoubleArray;

private char[][] charNumDoubleArray;

private short[][] shortNumDoubleArray;

private int[][] integerNumDoubleArray;

private long[][] longNumDoubleArray;

private float[][] floatNumDoubleArray;

private double[][] doubleNumDoubleArray;

//基本包装类型数组

private Byte[] byteBoxingArray;

private Boolean[] booleanBoxingArray;

private Character[] charBoxingArray;

private Short[] shortBoxingArray;

private Integer[] integerBoxingArray;

private Long[] longBoxingArray;

private Float[] floatBoxingArray;

private Double[] doubleBoxingArray;

//基本包装类型二维数组

private Byte[][] byteBoxingDoubleArray;

private Boolean[][] booleanBoxingDoubleArray;

private Character[][] charBoxingDoubleArray;

private Short[][] shortBoxingDoubleArray;

private Integer[][] integerBoxingDoubleArray;

private Long[][] longBoxingDoubleArray;

private Float[][] floatBoxingDoubleArray;

private Double[][] doubleBoxingDoubleArray;

//其他常用类型

private BigDecimal bigDecimal;

private BigInteger bigInteger;

private Date date;

private String string;

//其他常用类型数组

private BigDecimal[] bigDecimalArray;

private BigInteger[] bigIntegerArray;

private Date[] dateArray;

private String[] stringArray;

//其他常用类型二维数组

private BigDecimal[][] bigDecimalDoubleArray;

private BigInteger[][] bigIntegerDoubleArray;

private Date[][] dateDoubleArray;

private String[][] stringDoubleArray;

//集合、MAP数组

private List[] listArray;

private Set[] setArray;

private Map[] mapArray;

//集合、MAP二维数组

private List[][] listDoubleArray;

private Set[][] setDoubleArray;

private Map[][] mapDoubleArray;

//集合、MAP二维数组(内部数组)

private List[][] listInnerArrayDoubleArray;

private Set[][] setInnerArrayDoubleArray;

private Map[][] mapInnerArrayDoubleArray;

//集合、MAP二维数组(内部二维数组)

private List[][] listInnerDoubleArrayDoubleArray;

private Set[][] setInnerDoubleArrayDoubleArray;

private Map[][] mapInnerDoubleArrayDoubleArray;

//LIST

private List byteBoxingList;

private List booleanBoxingList;

private List charBoxingList;

private List shortBoxingList;

private List integerBoxingList;

private List longBoxingList;

private List floatBoxingList;

private List doubleBoxingList;

private List bigDecimalList;

private List bigIntegerList;

private List dateList;

private List stringList;

private List> stringListList;

private List> stringSetList;

private List> mapList;

//数组LIST

private List byteBoxingArrayList;

private List booleanBoxingArrayList;

private List charBoxingArrayList;

private List shortBoxingArrayList;

private List integerBoxingArrayList;

private List longBoxingArrayList;

private List floatBoxingArrayList;

private List doubleBoxingArrayList;

private List bigDecimalArrayList;

private List bigIntegerArrayList;

private List dateArrayList;

private List stringArrayList;

//二维数组LIST

private List byteBoxingDoubleArrayList;

private List booleanBoxingDoubleArrayList;

private List charBoxingDoubleArrayList;

private List shortBoxingDoubleArrayList;

private List integerBoxingDoubleArrayList;

private List longBoxingDoubleArrayList;

private List floatBoxingDoubleArrayList;

private List doubleBoxingDoubleArrayList;

private List bigDecimalDoubleArrayList;

private List bigIntegerDoubleArrayList;

private List dateDoubleArrayList;

private List stringDoubleArrayList;

//SET忽略同List

//MAP

private Map basicMap;

private Map keyArrayMap;

private Map valueArrayMap;

private Map keyValueArrayMap;

private Map keyValueDoubleArrayMap;

private Map, Map> keyListValueMapMap;

private Map[], Map[]> keyArrayListValueArrayMapMap;

//getter setter省略...

}

//调用模拟数据的方法模拟Java对象

BasicBean basicBean = JMockData.mock(BasicBean.class);

任意类型(LIST,SET,MAP)

@Test

//******注意TypeReference要加{}才能模拟******

public void testTypeRefrence() {

//模拟基础类型,不建议使用这种方式,参考基础类型章节直接模拟。

Integer integerNum = JMockData.mock(new TypeReference(){});

Integer[] integerArray = JMockData.mock(new TypeReference(){});

//模拟集合

List integerList = JMockData.mock(new TypeReference>(){});

//模拟数组集合

List integerArrayList = JMockData.mock(new TypeReference>(){});

//模拟集合数组

List[] integerListArray = JMockData.mock(new TypeReference[]>(){});

//模拟集合实体

List basicBeanList = JMockData.mock(new TypeReference>(){});

//各种组合忽略。。。。map同理。下面模拟一个不知道什么类型的map

Map>, Map, Double[]>> some = JMockData.mock(new TypeReference>, Map, Double[]>>>(){});

}

更改随机范围

MockConfig mockConfig = new MockConfig()

.byteRange((byte) 0, Byte.MAX_VALUE)

.shortRange((short) 0, Short.MAX_VALUE)

.intRange(0, Integer.MAX_VALUE)

.floatRange(0.0f, Float.MAX_EXPONENT)

.doubleRange(0.0, Double.MAX_VALUE)

.longRange(0, Long.MAX_VALUE)

.dateRange("2010-01-01", "2020-12-30")

.sizeRange(5, 10)

.stringSeed("a", "b", "c")

.charSeed((char) 97, (char) 98);

BasicBean basicBean = JMockData.mock(BasicBean.class, mockConfig);

高级特性

循环依赖

public class AXB {

private BXA BXA;

private String name;

//getter setter省略...

}

public class BXA {

private AXB AXB;

private String name;

//getter setter省略...

}

@Test

public void testCircular() {

AXB axb = JMockData.mock(AXB.class);

AXB circularAxb = axb.getBXA().getAXB();

assertSame(axb, circularAxb);

}

自依赖

public class SelfRefData {

private Integer id;

private String name;

private SelfRefData parent;

private Map parentMap;

private SelfRefData[] parentArray;

private List list;

private List listArray;

private List> listListArray;

private List[] arrayList;

private SelfRefData[][][] data;

private Map mapArray;

private Map> mapList;

private Map> mapListArray;

//getter setter省略...

}

@Test

public void testSelf() {

SelfRefData selfRefData = JMockData.mock(SelfRefData.class);

assertSame(selfRefData.getParent(), selfRefData);

}

泛型继承

//定义一个泛型父类

public class GenericData {

private A a;

private B b;

private C c;

private A[] aArray;

private List bList;

private Map map;

private List[] cArray;

private Map, List>[] d;

//getter setter省略...

}

@Test

public void testGenericData() {

GenericData genericData = JMockData.mock(new TypeReference>() {});

assertNotNull(genericData);

}

开发者/贡献者

感谢他们的大力支持,才有了Jmockdata-3.0.0全新版本!欢迎各路兄弟参与Jmockdata的迭代,让功能更完善。

交流讨论

Jmockdata 交流群:630287196

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jmockdata(再也不用苦逼的造测试数据了) Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。     The plug-in of Jmockdata what through random algorithm mock java data.   Jmockdata插件通过随机算法模拟Java数据.   版本信息 Jmockdata-2.0 发布时间 2017-02-03 Jmockdata-1.0 发布时间 2017-01-04 具体介绍和用法可以参考如下:   0. 模拟数据入口方法 JMockData.mock(JmockDataWrapper) 1. 被模拟数据必须继承JmockDataWrapper经过它的包装 2. 被模拟的数据最好是plain bean,只提供getter,setter,has,is方法的才可以被模拟 3. 框架默认实现了40个元数据类型的数据模拟器包括:   byte.class,Byte.class,byte[].class,Byte[].class, short.class,Short.class,short[].class,Short[].class, int.class,Integer.class,int[].class,Integer[].class, long.class,Long.class,long[].class,Long[].class, float.class,Float.class,float[].class,Float[].class, double.class,Double.class,double[].class,Double[].class, boolean.class,Boolean.class,boolean[].class,Boolean[].class, char.class,Character.class,char[].class,Character[].class, String.class,String[].class, BigDecimal.class,BigDecimal[].class, BigInteger.class,BigInteger[].class, Date.class,Date[].class 通过对以上基本元数据类型的模拟实现,本框架可以轻松模拟由以上元数据结构组成的BEAN、LIST、SET、ARRAY等复杂深度的数据结构的数据模拟。   4. 可以通过JmockDataContext 获取模拟过程的所有上下文信息,甚至可以打印整个模拟类型树   5. 可以通过JMockDataManager 注册模拟数据类型,重写模拟数据算法,注册模拟数据类拦截器等 6. 可以通过实现MockData来实现一个模拟数据类型 7. 可以通过实现JmockDataTemplate,或者继承JmockDataTemplateDefault来重写模拟数据算法 8. 可以通过实现JmockDataInterceptor来实现一个拦截器 9. 具体示例实践请参考https://github.com/jsonzou/jmockdata-demo 10. 有问题或者对本框架有新的想法,请联系我, 作者:jsonzou 标签:Jmockdata

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值