V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
clf
V2EX  ›  分享创造

CatMock: Java 下使用 mock.js 生成虚拟数据

  •  
  •   clf · 2020-02-10 20:47:52 +08:00 · 2396 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址:https://github.com/lychs1998/CatMock

    CatMock

    CatMock 是一个mock.js的 Java 封装库。使用 JDK 自带的 js 脚本引擎直接调用 mock.js 脚本,实现对 mock.js 的统一。

    为什么采用这样的方案?

    在开发互联网应用时,前后端在开发前使用接口管理平台设计接口。市面上常见的接口管理平台大部分使用了 Mock.js 作为虚拟接口和接口测试的工具。

    设计接口时,接口的定义是项目的重要资产。Mock.js 能很好地完成后端接口的单元测试。但后端在 CI/CD 进行集成测试时,往往需要自行编写测试用例,需要使用其它方式生成虚拟数据,无法复用接口设计阶段的项目资产。

    于是开始尝试使用纯 Java 编写一个兼容 Mock.js 语法的 Mock 工具:为了实现拓展自定义函数的功能,曾设计使用 Java 的 Function 接口对象作为用户自定义传入的函数来使用,但最后放弃了这一想法,因为写工具的初衷在于复用接口设计阶段的项目资产,而 Function 需要后端重新编写。

    最后,选择在 Java 中使用 Java 内置的 JavaScript 引擎直接调用 mock.js ,这样能保证和 mock.js 统一,保证接口设计阶段的项目资产能被复用。

    Maven

    <dependency>
        <groupId>cn.myzju.mock</groupId>
        <artifactId>CatMock</artifactId>
        <version>1.0.1</version>
    </dependency>
    

    使用说明

    获取 CatMock 对象

    //使用内置的 mock.js 文件初始化
    CatMock catMock = new CatMock();
    //使用外置的 mock.js 文件进行初始化
    CatMock catMock = new CatMock(new FileReader("{path}/mock.js"));
    

    Random

    传入参数:functionfunction('args'),返回类型为 String

    catMock.random("string"); //👉P^7
    catMock.random("lower(\"HELLO\")");//👉hello
    

    当前已知不兼容函数:

    • dataImage()

    Mock

    示例可参考mock.js 官方示例

    生成 Java 对象

    传入字符串必须以{开始,并以}结束

    Person person = catMock.mockObject("{\"name\":\"@string\"}",Person.class);
    

    生成 Java List

    传入字符串必须以[开始,并以]结束

    List<Person> persons = catMock.mockArray("[{\"name\":\"@string\"},{\"name\":\"@string\"}]",Person.class); 
    

    生成 String

    mock 方法传入非 JSON 格式的字符串(如下e.g.1所示)时,前后一定要加上单引号。

    //e.g.1
    catMock.mock("'@name'");//👉Anna Jackson
    //e.g.2
    catMock.mock("{\n'regexp|1-5': /\\d{5,10}\\-/\n}");//👉{"regexp": "5912165-6588485-0462848-"}
    

    Extend

    生成 CatMock 对象后,可以通过 extend 加载自定义函数。

    例如新增一个名为constellation,用于获取随机星座名称的方法,JavaScript 代码如下:

    {
        constellation: function(date) {
            var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']
            return this.pick(constellations)
        }
    }
    

    在 CatMock 中,将脚本代码直接以 String 类型传入 extend 函数:

    CatMock catMock = new CatMock()
    catMock.extend("{\n" +
            "    constellation: function(date) {\n" +
            "        var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']\n" +
            "        return this.pick(constellations)\n" + 
            "    }\n" +
            "}");
    catMock.random("constellation")//👉水瓶座
    catMock.mock("'@constellation'")//👉白羊座
    

    Development Plan

    • mock.js 后续版本的兼容
    • 变量容器:容器内可以存储各种变量,并能通过xxx.xxx[index].xxx的 key 值进行调用容器内的变量

    License

    CatMock is available under the terms of the MIT License.

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 19:00 · PVG 03:00 · LAX 11:00 · JFK 14:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.