Skip to content

Commit c58b89c

Browse files
author
v_zoupengfei
committed
mock simple bean
mock collection
1 parent 5dd92de commit c58b89c

File tree

12 files changed

+376
-158
lines changed

12 files changed

+376
-158
lines changed

.gitignore

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
*.war
2+
*.ear
3+
*.iml
4+
*.class
5+
.idea/
6+
.svn/
17
target/
2-
pom.xml.tag
3-
pom.xml.releaseBackup
4-
pom.xml.versionsBackup
5-
pom.xml.next
6-
release.properties
7-
dependency-reduced-pom.xml
8-
buildNumber.properties
9-
.mvn/timing.properties
8+
.project
9+
.mymetadata
10+
.classpath
11+
.settings/
12+
.DS_Store
13+

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ Jmockdata插件通过随机算法模拟Java数据.
55

66
示例可以参考单元测试内容,具体介绍和用法可以参考如下:
77

8-
0. 模拟数据入口方法 JMockData.mock(JmockDataWrapper)
9-
1. 被模拟数据必须继承JmockDataWrapper经过它的包装
8+
1. 模拟数据入口类Jmockdata
109
2. 被模拟的数据最好是plain bean,只提供getter,setter,has,is方法的才可以被模拟
1110
3. 框架默认实现了40个元数据类型的数据模拟器包括:
1211
``` byte.class,Byte.class,byte[].class,Byte[].class,

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.github.jsonzou</groupId>
66
<artifactId>jmockdata</artifactId>
7-
<version>2.1</version>
7+
<version>2.2</version>
88
<packaging>jar</packaging>
99

1010
<!-- projectName,description,url等。-->

src/main/java/com/github/jsonzou/jmockdata/JMockData.java

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.github.jsonzou.jmockdata;
22

33
import com.github.jsonzou.jmockdata.mockdata.*;
4+
import com.github.jsonzou.jmockdata.utils.ReflectionUtil;
5+
import com.github.jsonzou.jmockdata.utils.TypeReference;
6+
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
47

58
/**
6-
* <p>模拟数据入口方法
7-
* 1.被模拟数据必须继承JmockDataWrapper经过它的包装
8-
* 2.被模拟的数据必须是plain bean,只提供getter,setter方法的才可以被模拟
9-
* 3.框架默认实现了40个元数据类型的数据模拟器包括:
9+
* <p>
10+
* 1.框架默认实现了40个元数据类型的数据模拟器包括:
1011
* byte.class,Byte.class,byte[].class,Byte[].class,
1112
* short.class,Short.class,short[].class,Short[].class,
1213
* int.class,Integer.class,int[].class,Integer[].class,
@@ -19,11 +20,11 @@
1920
* BigDecimal.class,BigDecimal[].class,
2021
* BigInteger.class,BigInteger[].class,
2122
* Date.class,Date[].class
22-
* 4.可以通过JmockDataContext 获取模拟过程的所有上下文信息,甚至可以打印整个模拟类型树
23-
* 5.可以通过JMockDataManager 注册模拟数据类型,重写模拟数据算法,注册模拟数据类拦截器等
24-
* 6.可以通过实现MockData来实现一个模拟数据类型
25-
* 7.可以通过实现JmockDataTemplate,或者继承JmockDataTemplateDefault来重写模拟数据算法
26-
* 8.可以通过实现JmockDataInterceptor来实现一个拦截器
23+
* 2.可以通过JmockDataContext 获取模拟过程的所有上下文信息,甚至可以打印整个模拟类型树
24+
* 3.可以通过JMockDataManager 注册模拟数据类型,重写模拟数据算法,注册模拟数据类拦截器等
25+
* 4.可以通过实现MockData来实现一个模拟数据类型
26+
* 5.可以通过实现JmockDataTemplate,或者继承JmockDataTemplateDefault来重写模拟数据算法
27+
* 6.可以通过实现JmockDataInterceptor来实现一个拦截器
2728
* </p>
2829
*
2930
* @author jsonzou([email protected])
@@ -37,14 +38,59 @@ public static <T extends JmockDataWrapper> T mock(Class<T> mockType) {
3738
JmockDataContext context=JmockDataContext.newRootInstance(mockType);
3839
JmockDataWrapper data= JMockDataManager.getInstance().getMockDataBean(mockType).mock(context);
3940
data.setJmockDataContext(context);
41+
context.printTree();
4042
return (T)data;
4143
}
4244

45+
/**
46+
* mock collections
47+
* List
48+
* Map
49+
* Set
50+
* @param type
51+
* @param <T>
52+
* @return
53+
*/
54+
public static <T> T mockCollection(TypeReference<T> type) {
55+
ParameterizedTypeImpl dtype=(ParameterizedTypeImpl)type.getType();
56+
try {
57+
if(!ReflectionUtil.isContainer(ReflectionUtil.getClass(dtype))){
58+
return null;
59+
}
60+
JmockDataContext context=JmockDataContext.newRootInstance(ReflectionUtil.getClass(dtype));
61+
MockData md= JMockDataManager.getInstance().getMockDataBean(ReflectionUtil.getClass(dtype),
62+
ReflectionUtil.getParameterizedType(dtype));
63+
T data=(T)md.mock(context);
64+
context.printTree();
65+
return data;
66+
} catch (ClassNotFoundException e) {
67+
e.printStackTrace();
68+
}
69+
70+
return null;
71+
72+
}
73+
74+
/**
75+
* Mock POJO
76+
* Mock 元数据
77+
* @param simpleType
78+
* @param <T>
79+
* @return
80+
*/
81+
public static <T> T mockSimpleBean(Class<T> simpleType) {
82+
JmockDataContext context=JmockDataContext.newRootInstance(simpleType);
83+
T simple=JMockDataManager.getInstance().getMockDataBean(simpleType).mock(context);
84+
context.printTree();
85+
return simple;
86+
}
87+
4388
/**
4489
* mock 全部元数据
4590
* @return
4691
*/
4792
public static JmockdataWrapperMetaDataAll mockMetaDataAll() {
93+
4894
return mock(JmockdataWrapperMetaDataAll.class);
4995
}
5096

src/main/java/com/github/jsonzou/jmockdata/mockdata/JmockdataConfig.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* Created by v_zoupengfei on 2017/1/18.
1717
*/
1818
public class JmockdataConfig {
19+
private Boolean printContext=false;
1920
// value[seed,seed,seed]
2021
private Character[] seedCharacter =
2122
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
@@ -80,7 +81,9 @@ public void readConfig(String classpath) {
8081
key = en.getKey().toString();
8182
value = en.getValue().toString();
8283
Object fValueObj = getValue(key);
83-
if (key.startsWith("arrsize")
84+
if ("printContext".equals(key)){
85+
setValue(key,Boolean.valueOf(fValueObj.toString()));
86+
} else if (key.startsWith("arrsize")
8487
|| key.startsWith("rangeDate")
8588
|| key.startsWith("rangeInteger")
8689
) {
@@ -429,4 +432,12 @@ public Integer[] getArrsizeString() {
429432
public void setArrsizeString(Integer[] arrsizeString) {
430433
this.arrsizeString = arrsizeString;
431434
}
435+
436+
public Boolean getPrintContext() {
437+
return printContext;
438+
}
439+
440+
public void setPrintContext(Boolean printContext) {
441+
this.printContext = printContext;
442+
}
432443
}

0 commit comments

Comments
 (0)