通过 JavaFaker 快速生成模拟数据

Author Avatar
yujian95 4月 21, 2021
  • 在其它设备中阅读本文章

有时候我们需要创建一些模拟数据,用于演示软件。手动搬砖填写数据又太麻烦而且不真实,如何快速高效的创建“真实数据”?本文将介绍如何使用JavaFaker轻松生成模拟数据。

JavaFarker简介

项目代码仓库:JavaFaker

Java-Faker是一个开源的模拟数据生成工具,能够高效生成模拟数据。可生成类型数据如下,更多类型数据可查看【API文档

  • 地址、姓名、手机、公司、职业、日期、音乐
  • 书籍、游戏、颜色、大学、头像、二维码、应用程序
  • 数字、天气、编程语言、宝可梦、超级英雄、作家

使用方式

  1. 导入依赖
<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>0.12</version>
</dependency>
  1. 使用演示

可通过Locale设置显示各地区语言。

Faker faker = new Faker(new Locale("{YOUR_LOCALE}")); // {YOUR_LOCALE} 取值 zh-CN、en-US、zh-TW、en

String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // Barton

String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449

原理解析

以 App(应用程序类为例)。

核心类关系图

  • Faker:模拟数据核心类
  • FakeValuesInterface:读取数据集接口
  • FakeValuesGrouping:数据集分组类
  • FakeValuesService:模拟数据生成类
  • App:具体模拟数据对象类,App应用程序(名称、版本、作者)
  • RandomService:随机数生成类
  • EnFile:模拟数据集配置类,用于读取数据集yml配置文件

App

模拟数据对象类

package com.github.javafaker;

public class App {
    private final Faker faker;

    protected App(Faker faker) {
        this.faker = faker;
    }

    public String name() {
        return faker.fakeValuesService().resolve("app.name", this, faker);
    }

    public String version() {
        return faker.numerify(faker.fakeValuesService().resolve("app.version", this, faker));
    }

    public String author() {
        return faker.fakeValuesService().resolve("app.author", this, faker);
    }
}

核心流程

Faker.instance().app().name()为例,序列图如下所示。

  1. 创建App数据对象,调用name()方法。即faker.fakeValuesService().resolve("app.name", this, faker)
  2. 调用resolve(String key, Object current, Faker root)
    1. safeFetch(String key, String defaultIfNull),获取数据列表的某个的表达式(这里用RandomService随机生成一个序号)。
    2. fetchObject(String key),根据key值获取对应配置文件(读取EnFile中配置的yml文件)中的模拟数据列表。
  3. 通过resolveExpression(String expression, Object current, Faker root),解析表达式对应的值,转换为中文/其他语言。

Faker.instance().app().name()执行序列图

总结

除了在后端通过JavaFaker生成模拟数据外,也可以直接前端通过mock.js,生成模拟数据。

本站永久域名「 yujian95.cn 」,也可关注微信公众号「 编程图解 」找到我。
本文链接:http://yujian95.cn/post/explore/java-faker.html