創作目的
我們平時在寫測驗用例的時候,免不了要寫一大堆 set 方法為物件設定屬性,
有時候為了補全測驗用例,這件事就會變得非常枯燥,
于是就在想,能不能寫一個可以自動生成測驗物件的工具呢?
于是就有了這一個沒啥用的測驗框架:
https://github.com/houbb/data-factory
專案簡介
data-factory 專案用于根據物件,隨機自動生成初始化資訊,便于測驗,

特性
-
8 大基本型別的支持
-
陣列、物件、列舉、Map、鏈表、Set 等支持
-
String、BigDecimal、BigInteger、Currency 等常見型別的支持
-
Date、LocalDate、LocalDateTime、LocalTime、Year 等常見日期型別支持
-
支持 Regex 正則運算式
-
@DataFactory注解支持靈活配置
變更日志
變更日志
快速開始
準備作業
JDK 1.8+
Maven 3.0+
maven 引入
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>data-factory-core</artifactId>
<version>1.0.0</version>
</dependency>
基本型別
我們通過 DataUtil.build(class) 就可以生成對應類的隨機值,
比如 DataUtil.build(String.class);,就可以生成隨機的字串:
0s5Z8foS1
物件
當然,最常用的還是初始化一個 java 物件,
public class User {
private String name;
private int age;
private Date birthday;
private List<String> stringList;
//S/F 的列舉
private StatusEnum statusEnum;
private Map<String, String> map;
//Getter & Setter
}
構建方法 User user = DataUtil.build(User.class);
構建物件如下:
User{name='wZ8CJZtK', age=-564106861, birthday=Wed Feb 27 22:14:34 CST 2019, stringList=[Du4iJkQj], statusEnum=S, map={yA5yDqM=Kdzi}}
內容每次都隨機,便于基本的測驗資料填充,
@DataFactory 注解
當然,有時候我們希望生成的資料符合一定的規則,這個時候可以通過 @DataFactory 注解去進行限制,
詳情見 DataFactory 注解支持
物件定義
public class UserAnnotationNumber {
@DataFactory(min = 10, max = 20)
private Byte aByte;
@DataFactory(min = 10, max = 20)
private Short aShort;
@DataFactory(min = 10, max = 20)
private Integer integer;
@DataFactory(min = 10, max = 20)
private Long aLong;
@DataFactory(min = 10, max = 20, precision = 3)
private Double aDouble;
@DataFactory(min = 10, max = 20, precision = 3)
private Float aFloat;
@DataFactory(min = 10, max = 20, precision = 3)
private BigDecimal bigDecimal;
@DataFactory(min = 10, max = 20)
private BigInteger bigInteger;
//getter & setter
}
效果
通過 DataUtil.build(UserAnnotationNumber.class) 生成的物件如下:
UserAnnotationNumber{aByte=10, aShort=17, integer=19, aLong=11, aDouble=19.888, aFloat=10.067, bigDecimal=18.035, bigInteger=13}
自定義注解支持
為了更加靈活的指定生成,最大程度的重用自定義策略,
v1.0.0 支持用戶自定義注解,
自定義實作
注解定義
比如指定一個回傳固定值的注解,
package com.github.houbb.data.factory.core.annotation;
import com.github.houbb.data.factory.api.annotation.meta.DataMeta;
import java.lang.annotation.*;
/**
* @author binbin.hou
* @since 1.0.0
*/
@Inherited
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@DataMeta(value = AtMyStringAnnotationData.class)
public @interface ConstStringData {
String value() default "";
}
最重要的一點就是 @DataMeta(value = AtMyStringAnnotationData.class);
@DataMeta 是一個最核心的元注解,value 對應的是具體實作,
具體實作
AtMyStringAnnotationData 就是具體的注解實作,如下:
import com.github.houbb.data.factory.api.core.IContext;
import com.github.houbb.data.factory.api.core.meta.IAnnotationData;
public class AtMyStringAnnotationData implements IAnnotationData<ConstStringData> {
private ConstStringData constStringData;
@Override
public void initialize(ConstStringData annotation) {
constStringData = annotation;
}
@Override
public Object build(IContext context, Class aClass) {
return constStringData.value();
}
}
實作對應的 IAnnotationData 介面,initialize 初始化對應的注解資訊,
build 構建對應的值,
注解使用
定義好了注解,@ConstStringData 就可以如下使用了:
public class UserDefineAnnotationData {
@ConstStringData("echo")
private String name;
@ConstStringData("game")
private String hobby;
// getter & setter
}
測驗驗證
UserDefineAnnotationData data = DataUtil.build(UserDefineAnnotationData.class);
assert data.getName().equals("echo");
assert data.getHobby().equals("game");
可以驗證資料被初始化為對應的注解指定值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291838.html
標籤:其他
上一篇:基于SSM的大學生兼職平臺
下一篇:初識軟體測驗
