java生成mock数据

前言

在开发过程中,自测过程中。通常都是把参数固定了,做单元测试生成数据都是一样的,缺乏真实性。希望能尽量生成一些真实数据,查阅了点资料发现还是有些不错的框架。

jmockdata
java-faker
mockJs(一个前端js框架,java也可以调用js)

一起来玩玩,用起来吧!!!


1 jmockdata

源码地址:GitHub - jsonzou/jmockdata: The plugin to mock the java data by random.

贴上github上一段描述

Jmockdata是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。

插件通过随机算法模拟Java数据.

  • 支持丰富多样的数据类型模拟,包括:Java基本类型、字符串、枚举、日期、数组、多维数组、集合[List|Set|Map]、枚举、Java对象等
  • 支持通过正则表达式反向模拟数据
  • 支持泛型
  • 支持继承
  • 支持循环依赖、自依赖(手动开启enabledCircle)
  • 支持忽略字段
  • 支持改变mockConfig来自定义模拟数据策略
  • 支持自定义Mocker类扩展数据模拟类型
  • 支持添加BeanMocker拦截器类改变模拟行为
  • 支持JDK1.8+

hello word 起来

引入依赖

  <dependency>
     <groupId>com.github.jsonzou</groupId>
     <artifactId>jmockdata</artifactId>
     <version>4.3.0</version>
   </dependency>

支持以下基础类型直接模拟

描述类型
基础类型byte boolean char short int long float double
包装类型包装Byte Boolean Character Short Integer Long Float Double
常用类型BigDecimal BigInteger Date LocalDateTime LocalDate LocalTime java.sql.Timestamp String Enum
多维数组以上所有类型的多维数组 如:int[] int[][] int[][][] .... etc.
//基本类型模拟
int intNum = JMockData.mock(int.class);
int[] intArray = JMockData.mock(int[].class);
Integer integer = JMockData.mock(Integer.class);
Integer[] integerArray = JMockData.mock(Integer[].class);
//常用类型模拟
BigDecimal bigDecimal = JMockData.mock(BigDecimal.class);
BigInteger bigInteger = JMockData.mock(BigInteger.class);
Date date = JMockData.mock(Date.class);
String str = JMockData.mock(String.class);

模拟bean,被模拟的数据最好是plain bean,通过反射给属性赋值。

支持模拟继承而来的属性。

@Data
public class Person {
    private String name;
    private Integer age;
    private String email;
}
 public static void main(String[] args) {
        Person person= JMockData.mock(Person.class);
        System.out.println(JSON.toJSONString(person));

    }

上面就能轻松的生成一个对象,但是打印出结果。感觉数据还是很假,不是我想要的。

 人的年龄怎么可能上千岁,黑山老妖了吗?邮箱格式也不合法。那么能不能尽量生成真实一些,答案当然是可以,说干就干。

 public static void main(String[] args) {
        MockConfig mockConfig =
                new MockConfig()
                        .subConfig("age")
                        // 设置 int 的范围
                        .intRange(1, 100)
                        .subConfig("email")
                        // 设置生成邮箱正则
                        .stringRegex("[a-z0-9]{5,15}\\@\\w{3,5}\\.[a-z]{2,3}")
                        .globalConfig();

        Person person = JMockData.mock(Person.class, mockConfig);
        System.out.println(JSON.toJSONString(person));

    }
 

 似乎真实了那么点哈。

2 Java Faker

源码地址:GitHub - DiUS/java-faker: Brings the popular ruby faker gem to Java

java faker 有个亮点支持国际化,这个感觉还是很棒的。可以生成自己想要的数据

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>1.0.2</version>
</dependency>
public static void main(String[] args) {
        Faker faker = new Faker(Locale.CHINA);
        Name name = faker.name();
        System.out.println("name : " + name.name());
        Address address=faker.address();
        System.out.println("streetAddress : " +address.streetAddress());
    }


 

3 java 调用mockJs

mockJs:Home · nuysoft/Mock Wiki · GitHub

https://cdn.bootcss.com/Mock.js/1.0.1-beta3/mock-min.js
直接上代码

  public static void main(String[] args) throws Exception {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
        String scriptString = FileUtils.readFileToString(new File("d:\\tmp\\mock-min.js"));
        engine.eval(scriptString);
        Object result = engine.eval("Mock.Random.boolean()");
        System.out.println(result);
        result = engine.eval("Mock.Random.county(true)");
        System.out.println(result);
        result = engine.eval("Mock.Random.cname()");
        System.out.println(result);
        result = engine.eval("Mock.Random.img()");
        System.out.println(result);
        result = engine.eval("Mock.Random.email()");
        System.out.println(result);
    }

 

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Jmockdata(再也不用苦逼的造测试数据了) Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。     The plug-in of Jmockdata what through random algorithm mock java data.   Jmockdata插件通过随机算法模拟Java数据.   版本信息 Jmockdata-2.0 发布时间 2017-02-03 Jmockdata-1.0 发布时间 2017-01-04 具体介绍和用法可以参考如下:   0. 模拟数据入口方法 JMockData.mock(JmockDataWrapper) 1. 被模拟数据必须继承JmockDataWrapper经过它的包装 2. 被模拟的数据最好是plain bean,只提供getter,setter,has,is方法的才可以被模拟 3. 框架默认实现了40个元数据类型的数据模拟器包括:   byte.class,Byte.class,byte[].class,Byte[].class, short.class,Short.class,short[].class,Short[].class, int.class,Integer.class,int[].class,Integer[].class, long.class,Long.class,long[].class,Long[].class, float.class,Float.class,float[].class,Float[].class, double.class,Double.class,double[].class,Double[].class, boolean.class,Boolean.class,boolean[].class,Boolean[].class, char.class,Character.class,char[].class,Character[].class, String.class,String[].class, BigDecimal.class,BigDecimal[].class, BigInteger.class,BigInteger[].class, Date.class,Date[].class 通过对以上基本元数据类型的模拟实现,本框架可以轻松模拟由以上元数据结构组成的BEAN、LIST、SET、ARRAY等复杂深度的数据结构的数据模拟。   4. 可以通过JmockDataContext 获取模拟过程的所有上下文信息,甚至可以打印整个模拟类型树   5. 可以通过JMockDataManager 注册模拟数据类型,重写模拟数据算法,注册模拟数据类拦截器等 6. 可以通过实现MockData来实现一个模拟数据类型 7. 可以通过实现JmockDataTemplate,或者继承JmockDataTemplateDefault来重写模拟数据算法 8. 可以通过实现JmockDataInterceptor来实现一个拦截器 9. 具体示例实践请参考https://github.com/jsonzou/jmockdata-demo 10. 有问题或者对本框架有新的想法,请联系我, 作者:jsonzou 标签:Jmockdata
Java中的Mock数据是指通过模拟生成随机数据来进行测试或填充数据库的过程。在Java中,有一些工具可以用来生成Mock数据,其中一个比较常用的工具是JMockData。这个工具可以通过简单的配置来直接生成各种类型的数据。 JMockData支持模拟多种基础类型,如byte、boolean、char、short、int、long、float、double等。同时还支持包装类型和常用类型,如Byte、Boolean、Character、Short、Integer、Long、Float、Double、BigDecimal、BigInteger、Date、String以及枚举类型。还可以模拟多维数组,包括以上所有类型的多维数组。例如,可以使用JMockData来生成int类型的数据,可以使用JMockData.mock(int.class),生成int数组可以使用JMockData.mock(int[].class),生成Integer类型可以使用JMockData.mock(Integer.class),生成Integer数组可以使用JMockData.mock(Integer[].class),生成BigDecimal类型可以使用JMockData.mock(BigDecimal.class),生成BigInteger类型可以使用JMockData.mock(BigInteger.class),生成Date类型可以使用JMockData.mock(Date.class),生成String类型可以使用JMockData.mock(String.class)等。 因此,使用JMockData可以很方便地生成各种JavaMock数据,用于测试或填充数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [java生成mock数据](https://blog.csdn.net/a714115852/article/details/122616441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java后端实现Mock模拟数据](https://blog.csdn.net/Kun_lei/article/details/124839070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值