mockj

项目介绍

生成mock数据的利器,mockjs 的 java 实现。同时内置随机 random 一个对象的功能。

maven 依赖

com.github.kevin-wang001

mockj

1.0

使用说明

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:

属性名|生成规则:属性值

'name|rule': value

// 属性名 name

// 生成规则 rule

// 属性值 value

注意:

属性名 和 生成规则 之间用竖线 | 分隔。

生成规则 是可选的。

生成规则 有 7 种格式:

'name|min-max': value

'name|count': value

'name|min-max.dmin-dmax': value

'name|min-max.dcount': value

'name|count.dmin-dmax': value

'name|count.dcount': value

'name|+step': value

生成规则 的 含义 需要依赖 属性值的类型 才能确定。

属性值 中可以含有 @占位符。

属性值 还指定了最终值的初始值和类型。

生成规则和示例

1 属性值是字符串 String

'name|min-max': string

通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。

'name|count': string

通过重复 string 生成一个字符串,重复次数等于 count。

2 属性值是数字 Number

'name|+1': number

属性值自动加 1,初始值为 number。

'name|min-max': number

生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。

'name|min-max.dmin-dmax': number

生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位。

Mock.mock("{

"number1|1-100.1-10": 1,

"number2|123.1-10": 1,

"number3|123.3": 1,

"number4|123.10": 1.123

}")

// =>

{

"number1": 12.92,

"number2": 123.51,

"number3": 123.777,

"number4": 123.1231091814

}

"name|+1": 100 属性值自动加 1,初始值为 100

"name|-1": 100 属性值自动减 1,初始值为 100

"name|1-100": 100 生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型

"name|1-100.1-10": 100 生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位

3 属性值是布尔型 Boolean

'name|1': boolean

随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。

4 属性值是对象 Object

'name|count': object

从属性值 object 中随机选取 count 个属性。

'name|min-max': object

从属性值 object 中随机选取 min 到 max 个属性。

5 属性值是数组 Array

'name|1': array

从属性值 array 中随机选取 1 个元素,作为最终值。

'name|+1': array

从属性值 array 中顺序选取 1 个元素,作为最终值。

'name|min-max': array

通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。

'name|count': array

通过重复属性值 array 生成一个新数组,重复次数为 count。

例子

手写模板:

String template = "{" +

"\"name|1-10\": \"★\"," +

"\"flag\": \"@character\"," +

"\"age|1-100\": 100," +

"\"next|+1\": 100," +

"\"point|1-100.1-2\": 100," +

"\"boy|1\": true," +

"\"startDate\": \"@date\"," +

"\"endDate\": \"@date(yyyy-MM-dd)\"," +

"\"courses|2\": [\"语文\",\"数学\",\"英语\"]," +

"\"courses2|1-2\": [\"语文\",\"数学\",\"英语\"]," +

"\"map|2-4\": {\"110000\": \"北京市\",\"120000\": \"天津市\",\"130000\": \"河北省\",\"140000\": \"山西省\"}" +

"}";

Foo foo = Mock.mock(template, Foo.class);

产生的mock数据:

{

"age":33,

"boy":false,

"courses":[

"英语",

"英语"

],

"courses2":[

"语文"

],

"endDate":1537459200000,

"flag":"s",

"map":{

"130000":"河北省",

"140000":"山西省"

},

"name":"★★★★★★★",

"next":100,

"point":67.76,

"startDate":1537524864573

}

使用随机模板1:

Foo mock = Mock.mock(TemplateHelper.randomTemplate(Foo.class), Foo.class);

产生的随机 mock 模板:

{

"age|0-32757":"1",

"flag":"@character",

"boy|1":"true",

"point|0-32757":"1",

"endDate":"$date",

"name":"xx",

"next|0-32757":"1",

"startDate":"$date"

}

产生的 mock 数据:

{

"next":30277,

"flag":"g",

"endDate":"2018-09-21T10:15:56.998Z",

"name":"RNvK",

"boy":"true",

"age":18243,

"point":30984,

"startDate":"2018-09-21T10:15:57.007Z"

}

使用随机模板2:

随机模板只支持对 string、number、date等数据类型进行mock,所以其他的复杂对象类型的mock,需要手动添加mock模板。mockj提供了相应的api进行操作

TemplateHelper helper = TemplateHelper.random(Foo.class);

helper.put("courses|2", new JSONArray(Lists.newArrayList("语文","数学","英语")));

helper.put("courses2|1-2", new JSONArray(Lists.newArrayList("语文","数学","英语")));

helper.put("map|2-4", JSONObject.parseObject("{\"110000\": \"北京市\",\"120000\": \"天津市\",\"130000\": \"河北省\",\"140000\": \"山西省\"}"));

helper.put("foo|1", JSONArray.parseArray("[{\"name\":\"zhangsan\",\"age\":12},{\"name\":\"lisi\",\"age\":10},{\"name\":\"wangwu\",\"age\":8}]"));

helper.put("foo1", JSONArray.parseObject("{\"name\":\"wangwu\",\"age\":8}"));

Foo mock = Mock.mock(helper.toTemplate(), Foo.class);

产生的 mock 数据:

{

"age":6120,

"boy":false,

"courses":[

"数学",

"语文"

],

"courses2":[

"数学",

"语文"

],

"endDate":1537525215493,

"flag":"h",

"foo":{

"age":8,

"boy":false,

"flag":"",

"name":"wangwu",

"next":0

},

"foo1":{

"age":8,

"boy":false,

"flag":"",

"name":"wangwu",

"next":0

},

"map":{

"110000":"北京市",

"120000":"天津市",

"130000":"河北省",

"140000":"山西省"

},

"name":"rdmo",

"next":7825,

"point":11937,

"startDate":1537525215494

}

提供反射接口,随机产生一个对象

这种方式支持的数据类型更加丰富。

例如:

Foo.class

// String 类型

private String name;

// char 类型

private char flag;

// 数字类型

private int age;

private int next;

private Double point;

// boolean 类型

private boolean boy;

// date 类型

private Date startDate;

private Date endDate;

// collection 类型

private List courses;

private Set courses2;

// map 类型

private Map map;

// Object 类型

private Foo foo;

private Foo foo1;

通过Api:Foo foo = MockR.random(new TypeReference(){}); 能产生如下的数据

{

"age":-61382,

"boy":true,

"courses":[

"hSer"

],

"courses2":[

"eatH"

],

"endDate":1537524456497,

"flag":"£",

"foo":{

"age":34475,

"boy":false,

"courses":[

"BTvW"

],

"courses2":[

"mFWP"

],

"endDate":1537524456497,

"flag":"c",

"map":{

"YUJl":"IVvP"

},

"name":"JyAL",

"next":-23634,

"point":-96035,

"startDate":1537524456497

},

"foo1":{

"age":-98010,

"boy":false,

"courses":[

"spTD"

],

"courses2":[

"WcQX"

],

"endDate":1537524456498,

"flag":"4",

"map":{

"ueYR":"ANbU"

},

"name":"XhFe",

"next":75119,

"point":21497,

"startDate":1537524456498

},

"map":{

"GzMk":"oJqQ"

},

"name":"tNzx",

"next":-54482,

"point":-20110,

"startDate":1537524456497

}

java 模板类 mock_mockj: 生成mock数据的利器,按照规则模板生成 mock 数据,mockjs的java实现。同时内置随机 random 一个对象的功能...相关推荐

  1. java+自带excel导出_Java实现微信内置浏览器导出Excel表格功能

    最近做项目的时候遇到了这样一个问题,微信内置的浏览器把下载这个功能屏蔽了.唉,,,折腾了一天,从网上各种找资料,但是给的解决方案都不是我想要的(也不知道谁复制的谁的,基本都一样). 在快下班的时候,我 ...

  2. emq数据储存到mysql,规则引擎示例 - 保存数据到 MySQL - 《EMQ X Enterprise v4.0 中文文档》 - 书栈网 · BookStack...

    保存数据到 MySQL 搭建 MySQL 数据库,并设置用户名密码为 root/public,以 MacOS X 为例:$ brew install mysql $ brew services sta ...

  3. 《火车头采集器采集网页数据》火车头配置规则采集信息文章数据。

    此为火车头采集器的页面 *左边建立分组,建议结构都和所需要采集的数据结构一致,不然数据多了起来,很容易混乱. 1, 创建任务 起始网址是指你需要抓取的网址,例如:http://www.day.gov. ...

  4. C++:类模板与模板类

    6.3 类模板和模板类 所谓类模板,实际上是建立一个通用类,其数据成员.成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表.使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从 ...

  5. c++模板类(一)理解编译器的编译模板过程

    如何组织编写模板程序 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:"模板的使用是容易的,但组织编写却不容易".看看我们几乎每天都能遇到的模板类吧,如STL, ATL, ...

  6. C++模板类详解及注意事项

    C++模板类 C++中有一个重要特性,那就是模板类型.类似于Objective-C中的泛型,C++通过类模板来实现泛型支持.它使用参数化的类型创建相应的函数和类,分别称之为函数模板和类模板. 模板是一 ...

  7. C++深入理解模板类

    ++的语法真是太多了 首先,栈可以使用指针压栈吗? 当然可以,这里写一个简单的栈 提到指针,可能会想到字符串,我们可以有以下几种传入 string str; 最简单的传入,得益于C++提供的强大的st ...

  8. 【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

    文章目录 函数模板 类模板 代码示例 函数模板 1. 模板编程 : 类似于 Java 中的泛型编程 ; ① 函数模板 : 对应着 Java 中的泛型方法 ; ② 类模板 : 对应 Java 中的泛型类 ...

  9. C++模板类注意事项

    最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小. 昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中, 当在main.cp ...

  10. C++ 模板类和友元

    模板类的友元分三类: 1,非模板友元. 2,约束模板友元,即友元的类型取决于类被实例化时的类型. 3,非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元. 1,模板类的非模板友元函数 cou ...

最新文章

  1. 研究生走私实验材料被海关查获!为了毕业,真的太难了...
  2. 【week3】psp (技术随笔)
  3. AbstractAutowireCapableBeanFactory 类对容器生成的Bean 添加后置处理器
  4. JFinal model简单包装,版本2
  5. 一步一步写算法(之递归和堆栈)
  6. PAT 1148 Werewolf – Simple Version – 甲级
  7. .Net MVC框架 + WCF 搭建 集群开发
  8. @Transactional什么情况才生效
  9. LoggingFilter Session 以及Async
  10. mybatis实现代码自动生成
  11. 批发企业如何使用订单软件app管理账目混乱问题
  12. Friendly Tiny6410的Superboot安装及DNW驱动的安装
  13. linux内存显示少,linux 显示的内存怎么少于我实际的物理内存
  14. IReport问题的整理
  15. 看懂需要勇气,33张人性图!
  16. 传感器怎么获取障碍物的宽度信息_基于多传感器信息融合的机器人障碍物检测...
  17. 【BZOJ 1305】[CQOI2009]dance跳舞
  18. 阻塞双端消息队列 BlockingDeque(先进先出的原则管理)
  19. 塔勒布四部曲之《反脆弱》
  20. 全基因组尺度的增强子--靶基因映射图谱解码非编码突变

热门文章

  1. PS笔刷:73款动漫风格的云朵小草花朵
  2. 【VUE项目实战】42、添加商品分类功能(三)
  3. python爬虫之爬取招聘岗位信息
  4. DAP数据加工流程梳理
  5. 后端-科室信息管理接口
  6. 软件测试人员是选择大公司好,还是选择小公司更好
  7. linux lpte_PC并行口LPT的IO操作(基于WinIo)
  8. matlab图上面加箭头,利用matlab如何在图形中绘制箭头
  9. 美颜技术---引导滤波 Guided Filter
  10. 《Python》re模块补充、异常处理