单元测试的利器 Jmockdata

Jmockdata

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

第一步:添加依赖

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

 

第二步:测试使用示例

package com.zhaogang.jmockdata;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.github.jsonzou.jmockdata.JMockData;
import com.zhaogang.model.User;
import org.junit.Test;

/**
 * Created by weixiang.wu on 2017/9/13.
 */
public class TestMockData {
    /**
     * 打印json结构
     *
     * @param data
     */
    private void print(Object data) {

        System.out.println(JSON.toJSONStringWithDateFormat(data, "YYYY-MM-dd HH:mm:ss", SerializerFeature.PrettyFormat));
    }

    @Test
    public void mockTest_mockSimpleType_mockPOJO() {
        User user= JMockData.mockSimpleType(User.class);
        print(user);
    }


}

 

 

 


/*
 * Copyright (C) 2017 Baidu, Inc. All Rights Reserved.
 */
package com.github.jsonzou.jmockdata.test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.github.jsonzou.jmockdata.JMockData;
import com.github.jsonzou.jmockdata.mockdata.JMockDataManager;
import com.github.jsonzou.jmockdata.mockdata.JmockdataWrapperMetaDataAll;
import com.github.jsonzou.jmockdata.mockdata.JmockdataWrapperMetaDataSingle;
import com.github.jsonzou.jmockdata.test.custommocktemplate.CustomJmockDataTemplate;
import com.github.jsonzou.jmockdata.test.interceptor.OneJmockDataInterceptor;
import com.github.jsonzou.jmockdata.test.registermockdatabean.MockDataStringBuffer;
import com.github.jsonzou.jmockdata.test.testbean.MockDemoBeanAnyData;
import com.github.jsonzou.jmockdata.test.testbean.User;
import com.github.jsonzou.jmockdata.test.wrapperbean.*;
import com.github.jsonzou.jmockdata.utils.TypeReference;
import org.junit.Test;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 测试
 *
 * @author jsonzou(keko-boy@163.com)
 * @version 1.0
 * @since 2016/12/26
 */
public class JMockDataTest {

    /**
     * 测试模拟简单POJO - User
     */
    @Test
    public void mockTest_mockSimpleType_mockPOJO() {
          User user= JMockData.mockSimpleType(User.class);
          print(user);
    }

    /**
     * 测试模拟any
     */
    @Test
    public void mockTest_mockSimpleType_mockAny() {
        MockDemoBeanAnyData anyData= JMockData.mockSimpleType(MockDemoBeanAnyData.class);
        print(anyData);
    }
    /**
     * 测试模拟元数据类型
     */
    @Test
    public void mockTest_mockSimpleType_mockMeta() {

        System.out.println("BigIntegerData => " + JMockData.mockSimpleType(BigInteger.class));
        System.out.println("BigIntegerArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(BigInteger[].class), true));

        System.out.println("BigDecimalData => " + JMockData.mockSimpleType(BigDecimal.class));
        System.out.println("BigDecimalArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(BigDecimal[].class), true));

        System.out.println("StringData => " + JMockData.mockSimpleType(String.class));
        System.out.println("StringArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(String[].class), true));


        System.out.println("DateData => " + JMockData.mockSimpleType(Date.class));
        System.out.println("DateArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(Date[].class), true));

        System.out.println("IntegerData => " + JMockData.mockSimpleType(Integer.class));
        System.out.println("IntegerBoxingArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(Integer[].class), true));
        System.out.println("IntegerUnboxingArrayData => " + JSON.toJSONString(JMockData.mockSimpleType(int[].class), true));

        System.out.println("ByteData => " +  JMockData.mockSimpleType(Byte.class));
        System.out.println("ByteBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Byte[].class), true));
        System.out.println("ByteUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(byte[].class), true));

        System.out.println("CharacterData => " +  JMockData.mockSimpleType(Character.class));
        System.out.println("CharacterBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Character[].class), true));
        System.out.println("CharacterUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(char[].class), true));

        System.out.println("BooleanData => " + JMockData.mockSimpleType(Boolean.class));
        System.out.println("BooleanBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Boolean[].class), true));
        System.out.println("BooleanUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(boolean[].class), true));


        System.out.println("LongData => " +  JMockData.mockSimpleType(Long.class));
        System.out.println("LongBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Long[].class), true));
        System.out.println("LongUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(long[].class), true));

        System.out.println("FloatData => " + JMockData.mockSimpleType(Float.class));
        System.out.println("FloatBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Float[].class), true));
        System.out.println("FloatUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(float[].class), true));

        System.out.println("ShortData => " + JMockData.mockSimpleType(Short.class));
        System.out.println("ShortBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Short[].class), true));
        System.out.println("ShortUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(short[].class), true));

        System.out.println("DoubleData => " +  JMockData.mockSimpleType(Double.class));
        System.out.println("DoubleBoxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(Double[].class), true));
        System.out.println("DoubleUnboxingArrayData => " +  JSON.toJSONString(JMockData.mockSimpleType(double[].class), true));
    }

    /**
     * 测试模拟
     * List,Set,Map三种常见数据结构
     */
    @Test
    public void mockTest_mockCollection() {
        List<String> listStr= JMockData.mockCollection(new TypeReference<List<String>>(){});
        List<User[]> listUser= JMockData.mockCollection(new TypeReference<List<User[]>>(){});
        Set<String> setStr= JMockData.mockCollection(new TypeReference<Set<String>>(){});
        Map<String,String> mapStr= JMockData.mockCollection(new TypeReference<Map<String,String>>(){});
        Map<String,User> mapUser= JMockData.mockCollection(new TypeReference<Map<String,User>>(){});

        print(listStr);
        print(listUser);
        print(setStr);
        print(mapStr);
        print(mapUser);

    }



    /**
     * 测试一次模拟全部元数据类型JmockdataWrapperMetaDataAll
     * 元数据类型包括40种
     * 元数据类型不需提供Wrapper类,直接调用JMockData.mockMetaDataAll().getXxxData()即可获取元数据类型模拟数据
     */
    @Test
    public void mockTest_mockMetaDataAll() {
        JmockdataWrapperMetaDataAll metaDataMocker= JMockData.mockMetaDataAll();
        System.out.println("BigIntegerData => " + metaDataMocker.getBigIntegerData());
        System.out.println("BigIntegerArrayData => " + JSON.toJSONString(metaDataMocker.getBigIntegerArrayData(), true));

        System.out.println("BigDecimalData => " + metaDataMocker.getBigDecimalData());
        System.out.println("BigDecimalArrayData => " + JSON.toJSONString(metaDataMocker.getBigDecimalArrayData(), true));

        System.out.println("StringData => " + metaDataMocker.getStringData());
        System.out.println("StringArrayData => " + JSON.toJSONString(metaDataMocker.getStringArrayData(), true));


        System.out.println("DateData => " + metaDataMocker.getDateData());
        System.out.println("DateArrayData => " + JSON.toJSONString(metaDataMocker.getDateArrayData(), true));

        System.out.println("IntegerData => " + metaDataMocker.getIntegerData());
        System.out.println("IntegerBoxingArrayData => " + JSON.toJSONString(metaDataMocker.getIntegerBoxingArrayData(), true));
        System.out.println("IntegerUnboxingArrayData => " + JSON.toJSONString(metaDataMocker.getIntegerUnboxingArrayData(), true));

        System.out.println("ByteData => " +  metaDataMocker.getByteData());
        System.out.println("ByteBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getByteBoxingArrayData(), true));
        System.out.println("ByteUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getByteUnboxingArrayData(), true));

        System.out.println("CharacterData => " +  metaDataMocker.getCharacterData());
        System.out.println("CharacterBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getCharacterBoxingArrayData(), true));
        System.out.println("CharacterUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getCharacterUnboxingArrayData(), true));

        System.out.println("BooleanData => " +  metaDataMocker.getBooleanData());
        System.out.println("BooleanBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getBooleanBoxingArrayData(), true));
        System.out.println("BooleanUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getBooleanUnboxingArrayData(), true));


        System.out.println("LongData => " +  metaDataMocker.getLongData());
        System.out.println("LongBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getLongBoxingArrayData(), true));
        System.out.println("LongUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getLongUnboxingArrayData(), true));

        System.out.println("FloatData => " +  metaDataMocker.getFloatData());
        System.out.println("FloatBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getFloatBoxingArrayData(), true));
        System.out.println("FloatUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getFloatUnboxingArrayData(), true));

        System.out.println("ShortData => " +  metaDataMocker.getShortData());
        System.out.println("ShortBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getShortBoxingArrayData(), true));
        System.out.println("ShortUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getShortUnboxingArrayData(), true));

        System.out.println("DoubleData => " +  metaDataMocker.getDoubleData());
        System.out.println("DoubleBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getDoubleBoxingArrayData(), true));
        System.out.println("DoubleUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getDoubleUnboxingArrayData(), true));

    }
    /**
     * 测试模拟单个元数据类型模拟JmockdataWrapperMetaDataSingle
     * 元数据类型包括40种
     * 元数据类型不需提供Wrapper类,直接调用JMockData.mockMetaDataSingle().getXxxData()即可获取元数据类型模拟数据
     */
    @Test
    public void mockTest_mockMetaDataSingle() {
        JmockdataWrapperMetaDataSingle metaDataMocker= JMockData.mockMetaDataSingle();
        System.out.println("BigIntegerData => " + metaDataMocker.getBigIntegerData());
        System.out.println("BigIntegerArrayData => " + JSON.toJSONString(metaDataMocker.getBigIntegerArrayData(), true));

        System.out.println("BigDecimalData => " + metaDataMocker.getBigDecimalData());
        System.out.println("BigDecimalArrayData => " + JSON.toJSONString(metaDataMocker.getBigDecimalArrayData(), true));
        
        System.out.println("StringData => " + metaDataMocker.getStringData());
        System.out.println("StringArrayData => " + JSON.toJSONString(metaDataMocker.getStringArrayData(), true));
        
        

        System.out.println("DateData => " + metaDataMocker.getDateData());
        System.out.println("DateArrayData => " + JSON.toJSONString(metaDataMocker.getDateArrayData(), true));

        System.out.println("IntegerData => " + metaDataMocker.getIntegerData());
        System.out.println("IntegerBoxingArrayData => " + JSON.toJSONString(metaDataMocker.getIntegerBoxingArrayData(), true));
        System.out.println("IntegerUnboxingArrayData => " + JSON.toJSONString(metaDataMocker.getIntegerUnboxingArrayData(), true));

        System.out.println("ByteData => " +  metaDataMocker.getByteData());
        System.out.println("ByteBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getByteBoxingArrayData(), true));
        System.out.println("ByteUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getByteUnboxingArrayData(), true));

        System.out.println("CharacterData => " +  metaDataMocker.getCharacterData());
        System.out.println("CharacterBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getCharacterBoxingArrayData(), true));
        System.out.println("CharacterUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getCharacterUnboxingArrayData(), true));

        System.out.println("BooleanData => " +  metaDataMocker.getBooleanData());
        System.out.println("BooleanBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getBooleanBoxingArrayData(), true));
        System.out.println("BooleanUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getBooleanUnboxingArrayData(), true));


        System.out.println("LongData => " +  metaDataMocker.getLongData());
        System.out.println("LongBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getLongBoxingArrayData(), true));
        System.out.println("LongUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getLongUnboxingArrayData(), true));

        System.out.println("FloatData => " +  metaDataMocker.getFloatData());
        System.out.println("FloatBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getFloatBoxingArrayData(), true));
        System.out.println("FloatUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getFloatUnboxingArrayData(), true));

        System.out.println("ShortData => " +  metaDataMocker.getShortData());
        System.out.println("ShortBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getShortBoxingArrayData(), true));
        System.out.println("ShortUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getShortUnboxingArrayData(), true));

        System.out.println("DoubleData => " +  metaDataMocker.getDoubleData());
        System.out.println("DoubleBoxingArrayData => " +  JSON.toJSONString(metaDataMocker.getDoubleBoxingArrayData(), true));
        System.out.println("DoubleUnboxingArrayData => " +  JSON.toJSONString(metaDataMocker.getDoubleUnboxingArrayData(), true));



    }

    /**
     * 测试模拟简单List<String>
     */
    @Test
    public void mockTest_SimpleStringList() {
        MockDemoSimpleListStringWrapper mockData = JMockData.mock(MockDemoSimpleListStringWrapper.class);
        mockData.getJmockDataContext().printTree(); // 打印类型树
        print(mockData.getList());
    }

    /**
     * 测试配置文件 》 改变默认算法行为
     */
    @Test
    public void mockTest_config() {
        JMockDataManager.getInstance().config("conf/config.properties");
       // System.out.println(JSONObject.toJSONString(JMockDataManager.getInstance().config(),true));
        MockDemoBeanConfigWrapper mockData = JMockData.mock(MockDemoBeanConfigWrapper.class);
        mockData.setJmockDataContext(null);
        print(mockData);
    }

    /**
     * 测试配置文件 》 改变默认算法行为
     */
    @Test
    public void mockTest_config_rangeMock() {
        JMockDataManager.getInstance().config("conf/config.properties");
        System.out.println(JMockData.mockMetaDataSingle().getDoubleData());
        System.out.println(JMockData.mockMetaDataSingle().getFloatData());
        System.out.println(JMockData.mockMetaDataSingle().getIntegerData());
        System.out.println(JMockData.mockMetaDataSingle().getLongData());
    }


    /**
     * 测试模拟任意类型的数据
     */
    @Test
    public void mockTest_MockAnyData() {
        MockDemoBeanAnyDataWrapper mockData = JMockData.mock(MockDemoBeanAnyDataWrapper.class);
        // mockData.getJmockDataContext().printTree(); // 打印类型树
        mockData.setJmockDataContext(null);
        print(mockData);
    }


    /**
     * 测试模拟自循环引用的数据
     */
    @Test
    public void mockTest_MockSelfRefData() {
        JMockDataManager.getInstance().setMaxSelfRefLevel(4);// 设置自循环体循环层级上限
        MockDemoBeanSelfRefDataWrapper mockData = JMockData.mock(MockDemoBeanSelfRefDataWrapper.class);
        // mockData.getJmockDataContext().printTree(); // 打印类型树
        mockData.setJmockDataContext(null);
        print(mockData);
    }


    /**
     * 测试模拟类型拦截器,之拦截String类型的模拟
     */
    @Test
    public void mockTest_Interceptor() {
        JMockDataManager.getInstance().interceptors(OneJmockDataInterceptor.class); // 拦截器 =》只拦截String类型
        MockDemoBeanSimpleDataWrapper mockData = JMockData.mock(MockDemoBeanSimpleDataWrapper.class);
        print(mockData.getSimpleData());
    }

    /**
     * 测试模拟,增加自定义模拟类型,StringBuffer
     */
    @Test
    public void mockTest_RegisterMockDataBean() {
        JMockDataManager.getInstance().registerMockData(new MockDataStringBuffer(), StringBuffer.class);
        MockDemoCustomStringBufferWrapper mockData = JMockData.mock(MockDemoCustomStringBufferWrapper.class);
        print(mockData.getStringBuffer());
    }

    /**
     * 测试模拟,自定义模拟数据模板方法
     */
    @Test
    public void mockTest_CustomJmockDataTemplate() {
        JMockDataManager.getInstance().setMockTemplate(new CustomJmockDataTemplate());
        MockDemoBeanSimpleDataWrapper mockData = JMockData.mock(MockDemoBeanSimpleDataWrapper.class);
        print(mockData.getSimpleData());
    }


    /**
     * 打印json结构
     *
     * @param data
     */
    private void print(Object data) {

        System.out.println(JSON.toJSONStringWithDateFormat(data, "YYYY-MM-dd HH:mm:ss", SerializerFeature.PrettyFormat));
     //   System.out.println(JSON.toJSONString(data, true));
    }
}

 

转载于:https://my.oschina.net/wuweixiang/blog/1536928

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值