在程序开发初期,或者说有时候需要模拟假数据的情况下,我们可以采用mock 方式生成数据,本次实验采用Mock.js 模拟数据。
mock.js 下载地址 ,打开直接复制保存即可
https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.1-beta3/mock-min.js
Mock.js文档: Mock.js
下载之后 将mock.js 文件放在 resources 目录下即可,如图
程序中需要引用 JavaScriptEngine,故本次引入 hutool工具类
cn.hutool
hutool-all
5.7.22
编写 自定义mock 数据 js,测试数据如下
print();
function print(){
var data = Mock.mock({
'patientId': '@natural( 1000000, 6000000 )',
'name': '@cname',
'age': '@natural( 1, 100 )',
'gender': '@cword(男女)',
'bedNo': '@natural( 1, 120 )',
'diag': '@csentence'
})
return JSON.stringify(data, null, 4);
}
话不多说,直接编写测试类,进行测试
public class test {
private static final Cache lfuCache = CacheUtil.newLFUCache(1);
private static final JavaScriptEngine scriptEngine = ScriptUtil.getJavaScriptEngine();
public static void main(String[] args) throws ScriptException {
// 把mockjs读取到缓存
if (lfuCache.isEmpty()) {
String scriptString = FileUtil.readUtf8String("mock-min.js");
lfuCache.put("scriptString", scriptString, DateUnit.SECOND.getMillis() * 10);
scriptEngine.eval(scriptString);
}
System.out.println(scriptEngine.eval(FileUtil.readUtf8String("my-mock.js")));
}
}
返回值如下
{
"id": 2431241,
"name": "孙桂英",
"age": 8,
"gender": "男",
"bedNo": 17,
"diag": "京但向无织需叫性科习带种报。"
}
到此,就完成了数据模拟。
Mockjs依赖于Node (CommonJS)平台
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台
mockjs是Node.js中的一个模块
数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
// 属性名 name
// 生成规则 rule
// 属性值 value
'name|rule': value
注意:
|
分隔。'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
@占位符
。生成规则和示例:
'name|min-max': 'value'
通过重复 'value'
生成一个字符串,重复次数大于等于 min
,小于等于 max
。'name|count': 'value'
通过重复 'value'
生成一个字符串,重复次数等于 count
。属性值是数字 Number
'name|+1': 100
属性值自动加 1,初始值为 100'name|1-100': 100
生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型。'name|1-100.1-10': 100
生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。
{
'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': value
随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。'name|min-max': value
随机生成一个布尔值,值为 value
的概率是 min / (min + max)
,值为 !value
的概率是 max / (min + max)
。'name|min-max': {}
从属性值 {}
中随机选取 min
到 max
个属性。'name|count': {}
从属性值 {}
中随机选取 count
个属性。'name|1': [{}, {} ...]
从属性值 [{}, {} ...]
中随机选取 1 个元素,作为最终值。'name|min-max': [{}, {} ...]
通过重复属性值 [{}, {} ...]
生成一个新数组,重复次数大于等于 min
,小于等于 max
。'name|count': [{}, {} ...]
通过重复属性值 [{}, {} ...]
生成一个新数组,重复次数为 count
。属性值是数组 Function
'name': function(){}
执行函数 function(){}
,取其返回值作为最终的属性值,上下文为 'name'
所在的对象。
其他详细语法查看文档即可,在此不做过多赘述。