随机模拟 java 数据插件 Jmockdata

Apache
Java 查看源码»
跨平台
2017-01-05
寻觅一只耳朵

Jmockdata

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

mark

The plugin of Jmockdata what through random algorithm mock java data.
Jmockdata插件通过随机算法模拟Java数据.

mark

Feature

  • 支持丰富多样的数据类型模拟,包括:Java基本类型、字符串、枚举、日期、数组、多维数组、集合[List|Set|Map]、Java对象等
  • 支持泛型
  • 支持继承
  • 支持循环依赖、自依赖
  • 支持改变mockConfig来自定义模拟数据策略
  • 支持JDK1.7+,无任何第三方依赖

Download

Jmockdata-3.1.0

Jar

Jmockdata-3.1.0

Maven

 

     com.github.jsonzou

     jmockdata

     3.1.0

 

Gradle

compile group: 'com.github.jsonzou', name: 'jmockdata', version: '3.1.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);
  }

开发者/贡献者

JsonZou,TaoYu,KanYuXia

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

交流讨论

Jmockdata 交流群:630287196

加载中

评论(21)

啊启
我今天用了Jmockdata,好像Jmockdata3.1.0还不支持LocalDateTime
寻觅一只耳朵
寻觅一只耳朵
上一版本出了这问题,新版本会更新。
你龙哥哥
你龙哥哥
list集合如何不生成重复的
super-wen
super-wen
构建一个对象 list 的时候, list 里面的对象的属性都是一致的
落花流水丶
落花流水丶
jmockdata如何设置默认属性??
h
hwa01
看到这个工具感觉好熟悉啊,我也写了相同功能的工具,只是我写的很简单,楼主这个功能更完善。
光石头
光石头
好用,单元测试的必备利器。
无著方知尘亦珍
无著方知尘亦珍
有用,但作用不大。光数据格式检验就通不过,实际应用中,估计也就一些对格式没要求的能用下冒烟测试,至于单元测试就呵呵了。真正的单元测试是要断言的。
Tony_Lu
Tony_Lu
下载了jmockdata-demo, 但是跑JMockDataTest里的test方法都是报错。java.lang.UnsupportedClassVersionError: com/github/jsonzou/jmockdata/mockdata/MockData : Unsupported major.minor version 52.0 这是什么原因啊?

Jmockdata 3.1.0 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。 Jmockdata插件通过随机算法模拟Java数据。 更新内容 添加了注解MockIgnore,标注忽略模拟...

04/22 21:12

Jmockdata 3.0.1 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。 Jmockdata插件通过随机算法模拟Java数据。 更新内容 代码优化,性能提升,减少内部new对...

01/24 20:00

Jmockdata 3.0.0 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。 Jmockdata插件通过随机算法模拟Java数据。 更新内容 调整API调用接口 优化核心代码 增加...

01/20 18:15

Jmockdata 2.4 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试造数据的利器。 The plug-in of Jmockdata what through random algorithm mock java data. Jmock...

2017/04/14 17:08

Jmockdata 全版本更新支持JDK1.7+,随机模拟 Java 数据

Jmockdata 之前打包编译版本均为1.8,给部分jdk版本低使用的用户带来了不便。 为了适应童鞋们的需要,特将Jmockdata全版本(1.0,2.0,2.1,2.2,2.3)做了会从新发布,支持JDK1.7+. Jmockdta是一...

2017/04/10 19:14

Jmockdata 2.3 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试造数据的利器。 The plug-in of Jmockdata what through random algorithm mock java data. Jmock...

2017/04/08 21:39

随机模拟 Java 数据 - Jmockdata 2.2 版本发布

2.1版本发布后吸取了开源中国网友的一些建议做了一些改进,在此谢谢大家!希望大家有好的建议请在软件评论。 2.2版本新增mockSimpleType(),mockCollection()方法。可以直接模拟pojo,基本元数...

2017/03/30 15:43

随机模拟 Java 数据 - Jmockdata 2.1 版本发布

随机模拟 java 数据插件 jmockdata 2.1 版本发布 2.1版本新增类 JmockdataWrapperMetaDataAll.java , JmockdataWrapperMetaDataSingle.java 模拟40中元数据类型不需要写Wrapper类,方便直接模...

2017/03/29 11:05

Jmockdata 2.0 发布,随机模拟 Java 数据插件

Java 的猴子们新年好: 单元测试再也不用苦逼的造测试数据了。 Jmockdata-2.0 发布,解放您的重复劳动力。 Jmockdta 是一款实现模拟 JAVA 类型或对象的实例化并随机初始化对象的数据的工具框...

2017/02/03 16:42

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

Jmockdata随机模拟 Java 数据插件

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。 单元测试的利器。 The plug-in of Jmockdata what through random algorithm mock java data. Jmockdata...

2017/08/25 13:48
65
0
单元测试的利器 Jmockdata

Jmockdata Jmockdata是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。 第一步:添加依赖 <dependency> <groupId>com.github.jsonzou</groupId> <ar...

2017/09/13 17:40
40
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部