Jmockdta是一款實現模擬JAVA類型或對象的實例化並隨機初始化對象的數據的工具框架。單元測試的利器。The plug-in of Jmockdata what through random algorithm mock java data.Jmockdata外掛程式通過隨機算法模擬Java數據.
基本介紹
- 軟體名稱:Jmockdata
- 軟體平台:跨平台
- 最近更新時間:2017年01月04日
- 軟體語言:Java
- 開發商:個人
- 軟體授權:Apache 2.0
- 軟體版本:1.0
- 軟體大小:53k
基本介紹,引入,Maven,Gradle,測試使用示例,
基本介紹
Jmockdta是一款實現模擬JAVA類型或對象的實例化並隨機初始化對象的數據的工具框架。單元測試的利器。
The plug-in of Jmockdata what through random algorithm mock java data.
Jmockdata外掛程式通過隨機算法模擬Java數據.
示例可以參考單元測試內容,具體介紹和用法可以參考如下:
模擬數據入口方法 JMockData.mock(JmockDataWrapper)
被模擬數據必須繼承JmockDataWrapper經過它的包裝
被模擬的數據最好是plain bean,只提供getter,setter,has,is方法的才可以被模擬
框架默認實現了40個元數據類型的數據模擬器包括:
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等結構的模擬。
可以通過JmockDataContext 獲取模擬過程的所有上下文信息,甚至可以列印整個模擬類型樹
可以通過JMockDataManager 註冊模擬數據類型,重寫模擬數據算法,註冊模擬數據類攔截器等
可以通過實現MockData來實現一個模擬數據類型
可以通過實現JmockDataTemplate,或者繼承JmockDataTemplateDefault來重寫模擬數據算法
可以通過實現JmockDataInterceptor來實現一個攔截器
引入
Maven
<dependency>
<groupId>com.github.jsonzou</groupId>
<artifactId>jmockdata</artifactId>
<version>1.0</version>
</dependency>
Gradle
compile group: 'com.github.jsonzou', name: 'jmockdata', version: '1.0'
測試使用示例
示例代碼片段如下:
package org.jsonzou.jmockdata.test;
import com.alibaba.fastjson.JSON;
import org.jsonzou.jmockdata.JMockData;
import org.jsonzou.jmockdata.mockdata.JMockDataManager;
import org.jsonzou.jmockdata.test.custommocktemplate.CustomJmockDataTemplate;
import org.jsonzou.jmockdata.test.interceptor.OneJmockDataInterceptor;
import org.jsonzou.jmockdata.test.registermockdatabean.MockDataStringBuffer;
import org.jsonzou.jmockdata.test.wrapperbean.*;
import org.junit.Test;
/**
* 測試
*
* @version 1.0
* @since 2016/12/26
*/
public class JMockDataTest {
/**
* 測試模擬簡單List<String>
*/
@Test
public void mockTest_SimpleStringList() {
MockDemoSimpleListStringWrapper mockData = JMockData.mock(MockDemoSimpleListStringWrapper.class);
mockData.getJmockDataContext().printTree(); // 列印類型樹
print(mockData.getList());
}
/**
* 測試模擬任意類型的數據
*/
@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.toJSONString(data, true));
}
}