An open API service indexing awesome lists of open source software.

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

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版本的增强和扩展.