{"id":25776491,"url":"https://github.com/jsonzou/jmockdata","last_synced_at":"2025-02-27T06:06:36.290Z","repository":{"id":14959041,"uuid":"77355901","full_name":"jsonzou/jmockdata","owner":"jsonzou","description":"The plugin to mock the java data by random.","archived":false,"fork":false,"pushed_at":"2022-06-17T01:45:43.000Z","size":412,"stargazers_count":528,"open_issues_count":25,"forks_count":129,"subscribers_count":38,"default_branch":"master","last_synced_at":"2024-11-01T03:16:51.483Z","etag":null,"topics":["java-data","jmock","jmockdata","jmockit","mock-java-data","mocker"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsonzou.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-26T03:40:52.000Z","updated_at":"2024-09-19T01:48:36.000Z","dependencies_parsed_at":"2022-08-07T08:00:46.206Z","dependency_job_id":null,"html_url":"https://github.com/jsonzou/jmockdata","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzou%2Fjmockdata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzou%2Fjmockdata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzou%2Fjmockdata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzou%2Fjmockdata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsonzou","download_url":"https://codeload.github.com/jsonzou/jmockdata/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240987435,"owners_count":19889334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java-data","jmock","jmockdata","jmockit","mock-java-data","mocker"],"created_at":"2025-02-27T06:01:25.382Z","updated_at":"2025-02-27T06:06:36.284Z","avatar_url":"https://github.com/jsonzou.png","language":"Java","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"## \u003cimg src=\"https://img.shields.io/github/stars/jsonzou/jmockdata.svg?style=flat-square\u0026amp;label=Stars\u0026amp;logo=github\" alt=\"github star\"\u003e\n\n# Jmockdata\n[![Build Status](https://www.travis-ci.org/jsonzou/jmockdata.svg?branch=master)](https://www.travis-ci.org/jsonzou/jmockdata)\n[![Coverage Status](https://coveralls.io/repos/github/jsonzou/jmockdata/badge.svg)](https://coveralls.io/github/jsonzou/jmockdata)\n[![Maven central](https://maven-badges.herokuapp.com/maven-central/com.github.jsonzou/jmockdata/badge.svg)](http://mvnrepository.com/artifact/com.github.jsonzou/jmockdata)\n[![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)\n\n\nJmockdata是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。\n\n![mark](http://p1wz9nw0p.bkt.clouddn.com/blog/180118/0DaEC98Kib.png?imageslim)\n\nThe plugin of Jmockdata what through random algorithm mock java data.  \nJmockdata插件通过随机算法模拟Java数据.  \n\n![mark](http://p1wz9nw0p.bkt.clouddn.com/blog/180118/dclH8cgg30.png?imageslim)\n\n## Feature\n\n* 支持丰富多样的数据类型模拟，包括：Java基本类型、字符串、枚举、日期、数组、多维数组、集合[List|Set|Map]、枚举、Java对象等\n* 支持通过正则表达式反向模拟数据\n* 支持泛型\n* 支持继承\n* 支持循环依赖、自依赖(手动开启enabledCircle)\n* 支持忽略字段\n* 支持改变mockConfig来自定义模拟数据策略\n* 支持自定义Mocker类扩展数据模拟类型\n* 支持添加BeanMocker拦截器类改变模拟行为\n* 支持JDK1.8+\n\n\n## Download\n\n\u003e \n### _Jmockdata-4.3.0_\n#### Jar\n\u003e [Jmockdata-4.3.0](http://repo.maven.apache.org/maven2/com/github/jsonzou/jmockdata/4.3.0/jmockdata-4.3.0.jar)\n#### Maven\n ```\n   \u003cdependency\u003e\n      \u003cgroupId\u003ecom.github.jsonzou\u003c/groupId\u003e\n      \u003cartifactId\u003ejmockdata\u003c/artifactId\u003e\n      \u003cversion\u003e4.3.0\u003c/version\u003e\n    \u003c/dependency\u003e\n  ```\n#### Gradle\n ```\n   compile group: 'com.github.jsonzou', name: 'jmockdata', version: '4.3.0'\n  ```\n#### 更多已发布版本下载\n \u003e [https://github.com/jsonzou/jmockdata/releases](https://github.com/jsonzou/jmockdata/releases)\n \n## History version\n- [1.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-1.0-RELEASE)\n- [2.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-2.0-RELEASE)\n- [2.1](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-2.1-RELEASE)\n- [2.2](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-2.2-RELEASE)\n- [2.3](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-2.3-RELEASE)\n- [2.4](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-2.4-RELEASE)\n- [3.0.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-3.0.0-RELEASE)\n- [3.0.1](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-3.0.1-RELEASE)\n- [3.1.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-3.1.0-RELEASE)\n- [4.0.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.0.0-RELEASE)\n- [4.0.1](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.0.1-RELEASE)\n- [4.1.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.1.0-RELEASE)\n- [4.1.1](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.1.1-RELEASE)\n- [4.1.2](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.1.2-RELEASE)\n- [4.2.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.2.0-RELEASE)\n- [4.3.0](https://github.com/jsonzou/jmockdata/releases/tag/jmockdata-4.3.0-RELEASE)\n\n## Usage \n\n### 基础类型\n\n支持以下基础类型直接模拟\n\n| 描述     | 类型                                       |\n| ------ | ---------------------------------------- |\n| 基础类型   | ```byte```     ```boolean```     ```char```     ```short```     ```int```     ```long```     ```float```     ```double``` |\n| 包装类型包装 | ```Byte```     ```Boolean```     ```Character```     ```Short```     ```Integer```     ```Long```     ```Float```     ```Double``` |\n| 常用类型   | ```BigDecimal```        ```BigInteger```        ```Date```         ```LocalDateTime```        ```LocalDate```        ```LocalTime```        ```java.sql.Timestamp```       ```String```        ```Enum``` |\n| 多维数组   | 以上所有类型的多维数组  如：```int[]```      ```int[][]```  ```int[][][]```  .... etc. |\n\n```java\n//基本类型模拟\nint intNum = JMockData.mock(int.class);\nint[] intArray = JMockData.mock(int[].class);\nInteger integer = JMockData.mock(Integer.class);\nInteger[] integerArray = JMockData.mock(Integer[].class);\n//常用类型模拟\nBigDecimal bigDecimal = JMockData.mock(BigDecimal.class);\nBigInteger bigInteger = JMockData.mock(BigInteger.class);\nDate date = JMockData.mock(Date.class);\nString str = JMockData.mock(String.class);\n```\n\n### JAVA对象\n\n模拟bean，被模拟的数据最好是plain bean，通过反射给属性赋值。\n\n支持模拟继承而来的属性。\n\n```java\n//模拟Java对象\npublic class BasicBean {\n  //基本类型\n  private byte byteNum;\n  private boolean booleanNum;\n  private char charNum;\n  private short shortNum;\n  private int integerNum;\n  private long longNum;\n  private float floatNum;\n  private double doubleNum;\n  //基本包装类型\n  private Byte byteBoxing;\n  private Boolean booleanBoxing;\n  private Character charBoxing;\n  private Short shortBoxing;\n  private Integer integerBoxing;\n  private Long longBoxing;\n  private Float floatBoxing;\n  private Double doubleBoxing;\n  //基本类型数组\n  private byte[] byteNumArray;\n  private boolean[] booleanNumArray;\n  private char[] charNumArray;\n  private short[] shortNumArray;\n  private int[] integerNumArray;\n  private long[] longNumArray;\n  private float[] floatNumArray;\n  private double[] doubleNumArray;\n  //基本类型二维数组\n  private byte[][] byteNumDoubleArray;\n  private boolean[][] booleanNumDoubleArray;\n  private char[][] charNumDoubleArray;\n  private short[][] shortNumDoubleArray;\n  private int[][] integerNumDoubleArray;\n  private long[][] longNumDoubleArray;\n  private float[][] floatNumDoubleArray;\n  private double[][] doubleNumDoubleArray;\n  //基本包装类型数组\n  private Byte[] byteBoxingArray;\n  private Boolean[] booleanBoxingArray;\n  private Character[] charBoxingArray;\n  private Short[] shortBoxingArray;\n  private Integer[] integerBoxingArray;\n  private Long[] longBoxingArray;\n  private Float[] floatBoxingArray;\n  private Double[] doubleBoxingArray;\n  //基本包装类型二维数组\n  private Byte[][] byteBoxingDoubleArray;\n  private Boolean[][] booleanBoxingDoubleArray;\n  private Character[][] charBoxingDoubleArray;\n  private Short[][] shortBoxingDoubleArray;\n  private Integer[][] integerBoxingDoubleArray;\n  private Long[][] longBoxingDoubleArray;\n  private Float[][] floatBoxingDoubleArray;\n  private Double[][] doubleBoxingDoubleArray;\n  //其他常用类型\n  private BigDecimal bigDecimal;\n  private BigInteger bigInteger;\n  private Date date;\n  private String string;\n  //其他常用类型数组\n  private BigDecimal[] bigDecimalArray;\n  private BigInteger[] bigIntegerArray;\n  private Date[] dateArray;\n  private String[] stringArray;\n  //其他常用类型二维数组\n  private BigDecimal[][] bigDecimalDoubleArray;\n  private BigInteger[][] bigIntegerDoubleArray;\n  private Date[][] dateDoubleArray;\n  private String[][] stringDoubleArray;\n  //集合、MAP数组\n  private List\u003cInteger\u003e[] listArray;\n  private Set\u003cInteger\u003e[] setArray;\n  private Map\u003cInteger, String\u003e[] mapArray;\n  //集合、MAP二维数组\n  private List\u003cInteger\u003e[][] listDoubleArray;\n  private Set\u003cInteger\u003e[][] setDoubleArray;\n  private Map\u003cInteger, String\u003e[][] mapDoubleArray;\n  //集合、MAP二维数组(内部数组)\n  private List\u003cInteger[]\u003e[][] listInnerArrayDoubleArray;\n  private Set\u003cInteger[]\u003e[][] setInnerArrayDoubleArray;\n  private Map\u003cInteger[], String[]\u003e[][] mapInnerArrayDoubleArray;\n  //集合、MAP二维数组(内部二维数组)\n  private List\u003cInteger[][]\u003e[][] listInnerDoubleArrayDoubleArray;\n  private Set\u003cInteger[][]\u003e[][] setInnerDoubleArrayDoubleArray;\n  private Map\u003cInteger[][], String[][]\u003e[][] mapInnerDoubleArrayDoubleArray;\n  //LIST\n  private List\u003cByte\u003e byteBoxingList;\n  private List\u003cBoolean\u003e booleanBoxingList;\n  private List\u003cCharacter\u003e charBoxingList;\n  private List\u003cShort\u003e shortBoxingList;\n  private List\u003cInteger\u003e integerBoxingList;\n  private List\u003cLong\u003e longBoxingList;\n  private List\u003cFloat\u003e floatBoxingList;\n  private List\u003cDouble\u003e doubleBoxingList;\n  private List\u003cBigDecimal\u003e bigDecimalList;\n  private List\u003cBigInteger\u003e bigIntegerList;\n  private List\u003cDate\u003e dateList;\n  private List\u003cString\u003e stringList;\n  private List\u003cList\u003cString\u003e\u003e stringListList;\n  private List\u003cSet\u003cString\u003e\u003e stringSetList;\n  private List\u003cMap\u003cInteger, String\u003e\u003e mapList;\n  //数组LIST\n  private List\u003cByte[]\u003e byteBoxingArrayList;\n  private List\u003cBoolean[]\u003e booleanBoxingArrayList;\n  private List\u003cCharacter[]\u003e charBoxingArrayList;\n  private List\u003cShort[]\u003e shortBoxingArrayList;\n  private List\u003cInteger[]\u003e integerBoxingArrayList;\n  private List\u003cLong[]\u003e longBoxingArrayList;\n  private List\u003cFloat[]\u003e floatBoxingArrayList;\n  private List\u003cDouble[]\u003e doubleBoxingArrayList;\n  private List\u003cBigDecimal[]\u003e bigDecimalArrayList;\n  private List\u003cBigInteger[]\u003e bigIntegerArrayList;\n  private List\u003cDate[]\u003e dateArrayList;\n  private List\u003cString[]\u003e stringArrayList;\n  //二维数组LIST\n  private List\u003cByte[][]\u003e byteBoxingDoubleArrayList;\n  private List\u003cBoolean[][]\u003e booleanBoxingDoubleArrayList;\n  private List\u003cCharacter[][]\u003e charBoxingDoubleArrayList;\n  private List\u003cShort[][]\u003e shortBoxingDoubleArrayList;\n  private List\u003cInteger[][]\u003e integerBoxingDoubleArrayList;\n  private List\u003cLong[][]\u003e longBoxingDoubleArrayList;\n  private List\u003cFloat[][]\u003e floatBoxingDoubleArrayList;\n  private List\u003cDouble[][]\u003e doubleBoxingDoubleArrayList;\n  private List\u003cBigDecimal[][]\u003e bigDecimalDoubleArrayList;\n  private List\u003cBigInteger[][]\u003e bigIntegerDoubleArrayList;\n  private List\u003cDate[][]\u003e dateDoubleArrayList;\n  private List\u003cString[][]\u003e stringDoubleArrayList;\n  //SET忽略同List\n  //MAP\n  private Map\u003cString, Integer\u003e basicMap;\n  private Map\u003cString[], Integer\u003e keyArrayMap;\n  private Map\u003cString, Integer[]\u003e valueArrayMap;\n  private Map\u003cString[], Integer[]\u003e keyValueArrayMap;\n  private Map\u003cString[][], Integer[][]\u003e keyValueDoubleArrayMap;\n  private Map\u003cList\u003cString\u003e, Map\u003cString, Integer\u003e\u003e keyListValueMapMap;\n  private Map\u003cList\u003cString\u003e[], Map\u003cString, Integer\u003e[]\u003e keyArrayListValueArrayMapMap;\n  //getter setter省略...\n}\n\n//调用模拟数据的方法模拟Java对象\nBasicBean basicBean = JMockData.mock(BasicBean.class);\n```\n### 容器类型（LIST,SET,MAP）\n\n```java\n@Test\n//******注意TypeReference要加{}才能模拟******\npublic void testTypeRefrence() {\n  //模拟基础类型，不建议使用这种方式，参考基础类型章节直接模拟。\n  Integer integerNum = JMockData.mock(new TypeReference\u003cInteger\u003e(){});\n  Integer[] integerArray = JMockData.mock(new TypeReference\u003cInteger[]\u003e(){});\n  //模拟集合\n  List\u003cInteger\u003e integerList = JMockData.mock(new TypeReference\u003cList\u003cInteger\u003e\u003e(){});\n  //模拟数组集合\n  List\u003cInteger[]\u003e integerArrayList = JMockData.mock(new TypeReference\u003cList\u003cInteger[]\u003e\u003e(){});\n  //模拟集合数组\n  List\u003cInteger\u003e[] integerListArray = JMockData.mock(new TypeReference\u003cList\u003cInteger\u003e[]\u003e(){});\n  //模拟集合实体\n  List\u003cBasicBean\u003e basicBeanList = JMockData.mock(new TypeReference\u003cList\u003cBasicBean\u003e\u003e(){});\n  //各种组合忽略。。。。map同理。下面模拟一个不知道什么类型的map\n  Map\u003cList\u003cMap\u003cInteger, String[][]\u003e\u003e, Map\u003cSet\u003cString\u003e, Double[]\u003e\u003e some = JMockData.mock(new TypeReference\u003cMap\u003cList\u003cMap\u003cInteger, String[][]\u003e\u003e, Map\u003cSet\u003cString\u003e, Double[]\u003e\u003e\u003e(){});\n}\n```\n\n### 更改随机范围以及排除某些不模拟数据的字段\n#### 字段支持三种模式匹配，可快速配置：[\\*FieldWord\\*]、[\\*FieldWord]、[FieldWord\\*]\n```java\nMockConfig mockConfig = new MockConfig()\n            // 全局配置\n            .globalConfig()\n            .setEnabledStatic(false);\n            .setEnabledPrivate(false);\n            .setEnabledPublic(false);\n            .setEnabledProtected(false);\n            .sizeRange(1,1)\n            .charSeed((char) 97, (char) 98)\n            .byteRange((byte) 0, Byte.MAX_VALUE)\n            .shortRange((short) 0, Short.MAX_VALUE)\n\n            // 某些字段（名等于integerNum的字段、包含float的字段、double开头的字段）配置\n            .subConfig(\"integerNum\",\"*float*\",\"double*\")\n            .intRange(10, 11)\n            .floatRange(1.22f, 1.50f)\n            .doubleRange(1.50,1.99)\n\n            // 某个类的某些字段（long开头的字段、date结尾的字段、包含string的字段）配置。\n            .subConfig(BasicBean.class,\"long*\",\"*date\",\"*string*\")\n            .longRange(12, 13)\n            .dateRange(\"2018-11-20\", \"2018-11-30\")\n            .stringSeed(\"SAVED\", \"REJECT\", \"APPROVED\")\n            .sizeRange(1,1)\n\n            // 全局配置\n            .globalConfig()\n            // 排除所有包含list/set/map字符的字段。表达式不区分大小写。\n            .excludes(\"*List*\",\"*Set*\",\"*Map*\")\n            // 排除所有Array开头/Boxing结尾的字段。表达式不区分大小写。\n            .excludes(BasicBean.class,\"*Array\",\"Boxing*\");\n    BasicBean basicBean = JMockData.mock(BasicBean.class, mockConfig);\n```\n\n## 高级特性\n### 设置小数位数\n```java\n public void testDecimalScaleMock() {\n    MockConfig mockConfig = new MockConfig()\n            .doubleRange(-1.1d,9999.99999d)\n            .floatRange(-1.11111f,9999.99999f)\n            .decimalScale(3) // 设置小数位数为3，默认是2\n            .globalConfig();\n    JMockData.mock(BigDecimal.class,mockConfig);\n  }\n ```\n\n### 根据正则模拟数据\n#### 支持\\w \\W \\d \\D \\s \\S\n#### 支持\\[0-9a-zA-Z\\] \\[abc123_\\]\n#### 支持{n} {n,} {n,m}\n#### 支持 * + . ?\n#### 不支持其他，如() ^ $ | \\n \\t \\cx \\b \\B \\f 等等\n\n\n```java\n\n   /**\n    * 根据正则模拟数据\n    * 正则优先于其他规则\n    */\n   @Test\n   public void testRegexMock() {\n     MockConfig mockConfig = new MockConfig()\n                 // 随机段落字符串\n                 .stringRegex(\"I'am a nice man\\\\.And I'll just scribble the characters, like：[a-z]{2}-[0-9]{2}-[abc123]{2}-\\\\w{2}-\\\\d{2}@\\\\s{1}-\\\\S{1}\\\\.?-.\")\n                 // 邮箱\n                 .subConfig(RegexTestDataBean.class,\"userEmail\")\n                 .stringRegex(\"[a-z0-9]{5,15}\\\\@\\\\w{3,5}\\\\.[a-z]{2,3}\")\n                 // 用户名规则\n                 .subConfig(RegexTestDataBean.class,\"userName\")\n                 .stringRegex(\"[a-zA-Z_]{1}[a-z0-9_]{5,15}\")\n                 // 年龄\n                 .subConfig(RegexTestDataBean.class,\"userAge\")\n                 .numberRegex(\"[1-9]{1}\\\\d?\")\n                 // 用户现金\n                 .subConfig(RegexTestDataBean.class,\"userMoney\")\n                 .numberRegex(\"[1-9]{2}\\\\.\\\\d?\")\n                 // 用户的得分\n                 .subConfig(RegexTestDataBean.class,\"userScore\")\n                 .numberRegex(\"[1-9]{1}\\\\d{1}\")\n                 // 用户身价\n                 .subConfig(RegexTestDataBean.class,\"userValue\")\n                 .numberRegex(\"[1-9]{1}\\\\d{3,8}\")\n                 .globalConfig();\n\n   }\n\n```\n\n### 循环依赖\n\n```java\npublic class AXB {\n  private BXA BXA;\n  private String name;\n  //getter setter省略...\n}\npublic class BXA {\n  private AXB AXB;\n  private String name;\n  //getter setter省略...\n}\n@Test\npublic void testCircular() {\n   AXB axb = JMockData.mock(AXB.class);\n   AXB circularAxb = axb.getBXA().getAXB();\n   assertSame(axb, circularAxb);\n}\n```\n\n### 自依赖\n\n```java\npublic class SelfRefData {\n\n  private Integer id;\n  private String name;\n  private SelfRefData parent;\n  private Map\u003cSelfRefData, SelfRefData\u003e parentMap;\n  private SelfRefData[] parentArray;\n  private List\u003cSelfRefData\u003e list;\n  private List\u003cSelfRefData[]\u003e listArray;\n  private List\u003cList\u003cSelfRefData[]\u003e\u003e listListArray;\n  private List\u003cSelfRefData\u003e[] arrayList;\n\n  private SelfRefData[][][] data;\n  private Map\u003cSelfRefData, SelfRefData[]\u003e mapArray;\n  private Map\u003cSelfRefData, List\u003cSelfRefData\u003e\u003e mapList;\n  private Map\u003cSelfRefData, List\u003cSelfRefData[]\u003e\u003e mapListArray;\n  //getter setter省略...\n}\n@Test\npublic void testSelf() {\n   SelfRefData selfRefData = JMockData.mock(SelfRefData.class);\n   assertSame(selfRefData.getParent(), selfRefData);\n}\n```\n\n### 泛型继承\n\n```java\n//定义一个泛型父类\npublic class GenericData\u003cA, B, C\u003e {\n  private A a;\n  private B b;\n  private C c;\n  private A[] aArray;\n  private List\u003cB\u003e bList;\n  private Map\u003cA, B\u003e map;\n  private List\u003cC\u003e[] cArray;\n  private Map\u003cMap\u003cA, B\u003e, List\u003cC\u003e\u003e[] d;\n  //getter setter省略...\n}\n\n@Test\npublic void testGenericData() {\n    GenericData\u003cInteger, String, BasicBean\u003e genericData = JMockData.mock(new TypeReference\u003cGenericData\u003cInteger, String, BasicBean\u003e\u003e() {});\n    assertNotNull(genericData);\n  }\n```\n\n### 自定义Mocker类注册\n\n```java\nMockConfig mockConfig = new MockConfig()\n            .registerMocker(Mocker mocker, Class\u003cT\u003e... clazzs)\n\n```\n\n### 定义BeanMocker拦截器\n##### 通过实现接口BeanMockerInterceptor实现模拟bean时拦截功能，改变模拟行为\n#### 拦截器返回值类型说明:\n- 返回InterceptType.UNMOCK 不模拟, 排除此字段的模拟\n- 返回InterceptType.MOCK 自动模拟\n- 其他返回值，作为field的值通过反射注入\n\n```java\nMockConfig mockConfig = new MockConfig()\n           .registerBeanMockerInterceptor(new BeanMockerInterceptor() {...}) // 全局拦截\n           .registerBeanMockerInterceptor(SimpleBean.class,new BeanMockerInterceptor\u003cSimpleBean\u003e() {...})// 类型拦截\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonzou%2Fjmockdata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsonzou%2Fjmockdata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonzou%2Fjmockdata/lists"}