https://github.com/v2hoping/flymock
flymock is a convenient Java library that can generate mock data directly from class
https://github.com/v2hoping/flymock
java json mock object springboot
Last synced: 5 months ago
JSON representation
flymock is a convenient Java library that can generate mock data directly from class
- Host: GitHub
- URL: https://github.com/v2hoping/flymock
- Owner: v2hoping
- License: apache-2.0
- Created: 2019-03-08T03:48:55.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-06-17T02:11:50.000Z (about 4 years ago)
- Last Synced: 2025-07-29T22:52:08.442Z (11 months ago)
- Topics: java, json, mock, object, springboot
- Language: Java
- Homepage:
- Size: 147 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[English](https://github.com/v2hoping/flymock/blob/master/doc/english/Readme.md)|[中文](https://github.com/v2hoping/flymock/blob/master/README.md)
# flymock
flymock是一个可以将类直接生成模拟数据对象的java类库。它还可以将类转换为模拟数据模板,再由模拟数据模板生成JSON数据。flymock可以支持广泛的java类型,包含基本类型、复杂对象、泛型、枚举、嵌套泛型等。同时支持字段生成策略和多种占位符。
## Flymock目标
* 提供直接由类型生成模拟Java对象,减少单元测试中new对象和设置值
* 提供简单的template()和mock()方法,由类型转换为模拟数据模板和由类型直接转为模拟Java对象
* 广泛的支持Java类型,包括Java泛型
* 支持7种格式生成规则
* 支持多样的占位符,例如@cparagraph()、@email()、@ip()、@province(),允许自定义占位符,可通过@FiledMock注解快速设置
* 支持任意复杂的对象(包括深层嵌套和泛型嵌套、数组)
* 支持字段全局模拟规则,可根据组织情况,定义个性化、真实性高的模拟数据(X)
## Spring-boot-starter-flymock目标
* 提供SpringBoot starter,与SpringBoot快速集成
* 提供@EnableFlyMock和spring.fly.mock.enable参数来开关Stater
* 基于SpringBoot Aop提供和@FlyMock注解,支持拦截类、拦截方法返回模拟Java对象
## Maven Setting
```xml
com.v2hoping
flymock
0.1.1
```
```xml
com.v2hoping
spring-boot-starter-flymock
0.1.1
```
## 转换关系
Java类型------>Java模板数据------>JSON数据<------>Java对象
## 用法
**Java类型生成Java对象**
```java
//基本类型,举例:Integer
Integer integerValue = TemplateMock.mock(new TypeReference() {});
```
```java
//嵌套复杂对象,举例:User
User userValue = TemplateMock.mock(new TypeReference() {});
```
```java
//泛型对象,举例:List
List listTValues = TemplateMock.mock(new TypeReference>() {});
```
```java
public class User {
private String name;
private List educations;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getEducations() {
return educations;
}
public void setEducations(List educations) {
this.educations = educations;
}
public static class Education {
/**
* 教育名称
*/
private String name;
/**
* 教育时间
*/
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
}
```
**Java类型生成JSON数据**
```java
String userJson = TemplateMock.json(new TypeReference() {});
```
**Java类型生成Java模板**
```java
Template template = TemplateMock.template(new TypeReference() {});
```
**Java模板生成JSON数据**
```java
String userJson = template.mockToJson();
```
**Java模板生成Java对象**
```java
User user = template.mockType();
```
**Java模板字符串生成Java对象**
```java
String infoTemplateJson = "{\"name\":\"@string()\",\"educations\":[{\"date\":1557457171390,\"name\":\"vhJ\"}]}";
Template template = new Template<>(infoTemplateJson, new TypeReference(){});
User user = template.mockType();
```
**设置生成策略和占位符**
```java
public class Room {
@FiledMock(strategy = "2", value = "邮箱是:@email()")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Template template = TemplateMock.template(new TypeReference() {});
Room user = template.mockType();//{"name":"邮箱是:ahu@163.com邮箱是:ahu@163.com","educations":[{"date":1557454313538,"name":"nz8k"}]}
```
**自定义占位符**
```java
public static class MoviePlaceholderHandle extends AbstractPlaceholderHandle {
@Override
public String invoke(PlaceholderWrap placeholderWrap) {
List args = placeholderWrap.getArgs();
if(args.size() == 0) {
return "《钢铁侠》";
}else{
return "《钢铁侠" + args.get(0) +"》";
}
}
@Override
public String key() {
return "movie";
}
}
Mock.put(new MoviePlaceholderHandle());
```
```java
public class Info {
@FiledMock(strategy = "2", value = "电影是:@movie(2)")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Template template = TemplateMock.template(new TypeReference() {});
Info user = template.mockType();//{"name":"电影是:《钢铁侠2》电影是:《钢铁侠2》","educations":[{"date":1557456720233,"name":"wdDK9"}]}
```
## Spring-boot-starter-flymock用法
**开启starter**
```java
@SpringBootApplication
@ComponentScan(basePackages = {"com.hoping"})
@EnableFlyMock
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
**拦截并模拟类的所有方法返回值**
```java
@Component
@FlyMock
public class SomeMethod {
public String sayString() {
return null;
}
public User sayUser() {
return null;
}
}
String str = someMethod.sayString();
User user = someMethod.sayUser();
```
**拦截并模拟单个方法返回值**
```java
@Component
public class SomeMethod {
public String sayString() {
return null;
}
@FlyMock
public User sayUser() {
return null;
}
}
User user = someMethod.sayUser();
```
**SpringBoot自定义占位符**
```java
@Component
public static class MoviePlaceholderHandle extends AbstractPlaceholderHandle {
@Override
public String invoke(PlaceholderWrap placeholderWrap) {
List args = placeholderWrap.getArgs();
if(args.size() == 0) {
return "《钢铁侠》";
}else{
return "《钢铁侠" + args.get(0) +"》";
}
}
@Override
public String key() {
return "movie";
}
}
```
## 更多文档
- [数据模板定义规范](doc/cn/placeholder.md)
- [默认支持占位符](doc/cn/standard.md)
- [配置文件](doc/cn/config.md)
- [更新日志](doc/cn/log.md)
## 感谢 & 贡献者
FlyMock参考了Mock.js,模板JSON规范基本互相支持(不完全相同),可以看做是java版本的增强和扩展.