# Mock.java
**Repository Path**: luchao111/Mock.java
## Basic Information
- **Project Name**: Mock.java
- **Description**: 相信大部分前端开发人员都知道Mock.js,前端用来拦截Ajax并生成假数据进行测试的,用起来十分的舒适,顺手。(而且我个人很喜欢这种生成随机数据的感觉,很有趣o(* ̄▽ ̄*)ブ)但是我作为一个Java开发者,并不是一个前端开发工程师,所以使用Mock.js的情况并不会很多。这时候,我的心中萌生了一种想法:为什么java没有能获取假数据的“Mock.java”呢?只有前端有假数据可以玩太不公平了吧!凭借着这种想法,我开始写Mock.java了。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: idea-01
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 29
- **Created**: 2019-07-04
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Mock.java使用说明手册
## 简介
> 这是一个仿照Mock.js语法的Java语言使用的假数据生成工具框架。
> 部分方法与类介绍详细可查看JavaDoc文档:[JavaDoc文档](helpDoc/index.html)
>
> 此框架中不仅仅只可以作为假数据获取用,还有一些比较实用的工具类可以拿来单独使用。
>
> *工具类介绍:工具类介绍
>
> 当前版本:v1.2
>
> 最低JDK版本:JDK8
>
> 以下介绍的版本:v1.2 (第一版)
>
> *※ 版本更新内容与预期更新计划详见于文档末尾 : 更新公告*
>
>
## 使用方法
### 安装
在maven项目下,从pom.xml中导入以下地址(仅以最新版本作为示例):
```xml
io.gitee.ForteScarlet
mock.java
1.2
```
### 使用
> 相信使用过Mock.js的各位大佬应该知道,在使用Mock.js的时候是用的JSON格式的参数。
> 但是,Java可是没法直接识别JSON的啊!
> 所以,我们采用最接近JSON格式的方式:**Map集合**。
>
> 简单来说,就是将一个类的字段根据Mock.js那样的key-value的键值对转化为一个Map对象就好了!我习惯将这种Map对象称为 *字段映射表* 。
>
> 而且作为Java语言,数据类型是必须要多加考虑的问题。我在获取值的时候已经尽可能的增加了容错率,但是还是需要您注意数据类型的问题,请尽可能不要犯下将一个字符串赋值给整数这类难以防范的错误..
>
> 或许感觉上比JSON格式的使用要麻烦一些,但是这也是没有办法的事情嘛!假如您有更好的代替方式,希望您能告诉我 :)
## 框架中的一些常见"角色"
#### 参数解析器/任务分配器(ParameterParser)
> 负责对用户传入的字段映射(Map集合)进行解析并分配解析任务。
>
> 也可以将其理解为 **任务分配器** 。
#### 字段解析器(FieldParser)
> 接收任务分配器分配的任务并对字段和其映射进行解析,并取得字段值获取器(FieldValueGetter)。
#### 字段值获取器(FieldValueGetter)
> 使用字段值的setter方法和字段值获取方法执行者(Invoker)对某个字段进行赋值。
#### 字段值获取方法执行者(Invoker)
> 通过执行一个某种方法得到一个结果。用于获取字段的值。
#### 假对象(MockObject)
> 通过Mock.get(Class clz)方法获取到的返回值,用于获取假对象数据。
### 设置字段映射的方式:
#### 1·创建对象字段与随机值语法的映射关系(Map 类型的键值对)
> 创建的这个Map,Key值代表了映射的字段名,value值代表了映射语法
> 由于这毕竟与弱引用类型语言不同,所以在设置映射的时候请务必注意字段的数据类型。
`Map map = new HashMap<>();`
#### 2·添加字段映射
> 字段映射中,value值所用到的 @函数 可以从 [JavaDoc文档](helpDoc/index.html) 中查阅[**MockUtil**]类中的方法,MockUtil中的全部方法均可作为 @函数 出现在value值中。
>
> **再次提醒,请务必注意对应好字段的字段类型**
```java
map.put("age","@age");
map.put("list|2-3","@title");
map.put("user","@name");
......
```
> key值中,有三种写法:
>
> 仅有字段映射、字段映射与整数部分区间参数、字段映射、整数部分区间参数与小数部分区间参数。
>
> 例如如下这么两个字段映射:
>
> ```java
> map.put("money1|10-40.2-4" , 0);
> map.put("money2|10-40.2" , 0);
> ```
>
> 其中,字段名与区间参数之间的分割符为 **|** 符号,左边为字段名,右半边为区间参数。
>
> 区间参数中,整数部分与小数部分用 **.** 符- 号分割,左半边为整数部分区间参数,右半边为小数部分区间参数。
>
> - ##### 仅有字段映射
>
> > 任务分配器首先会根据参数(value)的类型分配字段解析器,然后再根据字段类型进行取值。
> >
> > 参数类型有一下几种情况:
> >
> > - **字符串类型**:如果存在一个或多个@函数,解析@函数并取值,(如果有多个@函数则会尝试对@函数的取值进行加法计算);如果不存在@函数或@函数不存在于MockUtil中的方法列表则将其会视为普通字符串。
> > - **整数(Integer)、浮点数(Double)类型**:如果参数为Integer或Double类型,则字段值获取器会直接将此值作为默认值赋给字段。
> > - **数组或集合**:如果参数是数组或集合类型,字段值获取器会从其中随机获取一个值赋予字段。
> > - **Map集合**:如果参数是Map集合类型,则任务分配器会对字段的类型进行判断,如果:
> > - 字段为Map类型,则直接将此Map作为字段值赋予字段,不做处理。
> > - 字段为List