{"id":18600619,"url":"https://github.com/houbb/data-factory","last_synced_at":"2025-06-29T14:33:18.947Z","repository":{"id":43944344,"uuid":"172513597","full_name":"houbb/data-factory","owner":"houbb","description":"🏭Auto generate mock data for java test.(便于 Java 测试自动生成对象信息)","archived":false,"fork":false,"pushed_at":"2023-06-28T06:17:00.000Z","size":144,"stargazers_count":91,"open_issues_count":8,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-19T08:09:52.359Z","etag":null,"topics":["data-factory","data-prepare","java-data-builder","junit-test","mock","mock-data","mock-test"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/houbb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-02-25T13:43:42.000Z","updated_at":"2025-04-15T23:16:48.000Z","dependencies_parsed_at":"2025-04-10T18:42:16.688Z","dependency_job_id":"9265f3f2-c6e1-4db9-8443-cb7bc07eb6bd","html_url":"https://github.com/houbb/data-factory","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/houbb/data-factory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fdata-factory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fdata-factory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fdata-factory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fdata-factory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/houbb","download_url":"https://codeload.github.com/houbb/data-factory/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fdata-factory/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262609495,"owners_count":23336724,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-factory","data-prepare","java-data-builder","junit-test","mock","mock-data","mock-test"],"created_at":"2024-11-07T02:04:45.160Z","updated_at":"2025-06-29T14:33:18.895Z","avatar_url":"https://github.com/houbb.png","language":"Java","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"# 创作目的\n\n我们平时在写测试用例的时候，免不了要写一大堆 set 方法为对象设置属性。\n\n有时候为了补全测试用例，这件事就会变得非常枯燥。\n\n于是就在想，能不能写一个可以自动生成测试对象的工具呢？\n\n于是就有了这一个没啥用的测试框架：\n\n\u003e [https://github.com/houbb/data-factory](https://github.com/houbb/data-factory)\n\n# 项目简介\n\n[data-factory](https://github.com/houbb/data-factory) 项目用于根据对象，随机自动生成初始化信息。便于测试。\n\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.houbb/data-factory/badge.svg)](http://mvnrepository.com/artifact/com.github.houbb/data-factory)\n[![Build Status](https://www.travis-ci.org/houbb/data-factory.svg?branch=master)](https://www.travis-ci.org/houbb/data-factory?branch=master)\n[![Coverage Status](https://coveralls.io/repos/github/houbb/data-factory/badge.svg?branch=master)](https://coveralls.io/github/houbb/data-factory?branch=master)\n\n## 特性\n\n- 8 大基本类型的支持\n\n- 数组、对象、枚举、Map、链表、Set 等支持\n\n- String、BigDecimal、BigInteger、Currency 等常见类型的支持\n\n- Date、LocalDate、LocalDateTime、LocalTime、Year 等常见日期类型支持\n\n- 支持 Regex 正则表达式\n\n- `@DataFactory` 注解支持灵活配置 \n\n# 变更日志\n\n\u003e [变更日志](doc/CHANGELOG.md)\n\n# 快速开始\n\n## 准备工作\n\nJDK 1.7+\n\nMaven 3.0+ \n\n## maven 引入\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.houbb\u003c/groupId\u003e\n    \u003cartifactId\u003edata-factory-core\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n对应的 gradle 引入\n\n```\nimplementation 'com.github.houbb:data-factory-core:1.2.0'\n```\n\n## 基本类型\n\n我们通过 `DataUtil.build(class)` 就可以生成对应类的随机值。\n\n比如 `DataUtil.build(String.class);`，就可以生成随机的字符串：\n\n```\n0s5Z8foS1\n```\n\n## 对象\n\n当然，最常用的还是初始化一个 java 对象。\n\n```java\npublic class User {\n\n    private String name;\n\n    private int age;\n\n    private Date birthday;\n\n    private List\u003cString\u003e stringList;\n\n    //S/F 的枚举\n    private StatusEnum statusEnum;\n\n    private Map\u003cString, String\u003e map;\n    \n    //Getter \u0026 Setter\n}\n```\n\n构建方法 `User user = DataUtil.build(User.class);`\n\n构建对象如下：\n\n```\nUser{name='wZ8CJZtK', age=-564106861, birthday=Wed Feb 27 22:14:34 CST 2019, stringList=[Du4iJkQj], statusEnum=S, map={yA5yDqM=Kdzi}}\n```\n\n内容每次都随机，便于基本的测试数据填充。\n\n## `@DataFactory` 注解\n\n当然，有时候我们希望生成的数据符合一定的规则，这个时候可以通过 `@DataFactory` 注解去进行限制。\n\n详情见 [DataFactory 注解支持](doc/blog/DataFactory-01-注解支持.md)\n\n### 对象定义\n\n```java\npublic class UserAnnotationNumber {\n\n    @DataFactory(min = 10, max = 20)\n    private Byte aByte;\n\n    @DataFactory(min = 10, max = 20)\n    private Short aShort;\n\n    @DataFactory(min = 10, max = 20)\n    private Integer integer;\n\n    @DataFactory(min = 10, max = 20)\n    private Long aLong;\n\n    @DataFactory(min = 10, max = 20, precision = 3)\n    private Double aDouble;\n\n    @DataFactory(min = 10, max = 20, precision = 3)\n    private Float aFloat;\n\n    @DataFactory(min = 10, max = 20, precision = 3)\n    private BigDecimal bigDecimal;\n\n    @DataFactory(min = 10, max = 20)\n    private BigInteger bigInteger;\n    \n    //getter \u0026 setter\n\n}\n```\n\n### 效果\n\n通过 `DataUtil.build(UserAnnotationNumber.class)` 生成的对象如下：\n\n```\nUserAnnotationNumber{aByte=10, aShort=17, integer=19, aLong=11, aDouble=19.888, aFloat=10.067, bigDecimal=18.035, bigInteger=13}\n```\n\n# 自定义注解支持\n\n为了更加灵活的指定生成，最大程度的重用自定义策略。\n\nv1.0.0 支持用户自定义注解。\n\n## 自定义实现\n\n### 注解定义\n\n比如指定一个返回固定值的注解。\n\n```java\npackage com.github.houbb.data.factory.core.annotation;\n\nimport com.github.houbb.data.factory.api.annotation.meta.DataMeta;\n\nimport java.lang.annotation.*;\n\n/**\n * @author binbin.hou\n * @since 1.0.0\n */\n@Inherited\n@Documented\n@Target(ElementType.FIELD)\n@Retention(RetentionPolicy.RUNTIME)\n@DataMeta(value = AtMyStringAnnotationData.class)\npublic @interface ConstStringData {\n\n    String value() default \"\";\n\n}\n```\n\n最重要的一点就是 `@DataMeta(value = AtMyStringAnnotationData.class)`;\n\n`@DataMeta` 是一个最核心的元注解，value 对应的是具体实现。\n\n### 具体实现\n\nAtMyStringAnnotationData 就是具体的注解实现，如下：\n\n```java\nimport com.github.houbb.data.factory.api.core.IContext;\nimport com.github.houbb.data.factory.api.core.meta.IAnnotationData;\n\npublic class AtMyStringAnnotationData implements IAnnotationData\u003cConstStringData\u003e {\n\n    private ConstStringData constStringData;\n\n    @Override\n    public void initialize(ConstStringData annotation) {\n        constStringData = annotation;\n    }\n\n    @Override\n    public Object build(IContext context, Class aClass) {\n        return constStringData.value();\n    }\n\n}\n```\n\n实现对应的 IAnnotationData 接口，initialize 初始化对应的注解信息。\n\nbuild 构建对应的值。\n\n### 注解使用\n\n定义好了注解，`@ConstStringData` 就可以如下使用了：\n\n```java\npublic class UserDefineAnnotationData {\n\n    @ConstStringData(\"echo\")\n    private String name;\n\n    @ConstStringData(\"game\")\n    private String hobby;\n\n    // getter \u0026 setter\n\n}\n```\n\n### 测试验证\n\n```java\nUserDefineAnnotationData data = DataUtil.build(UserDefineAnnotationData.class);\nassert  data.getName().equals(\"echo\");\nassert  data.getHobby().equals(\"game\");\n```\n\n可以验证数据被初始化为对应的注解指定值。\n\n# 拓展阅读\n\n[DataFactory-01-注解支持](doc/blog/DataFactory-01-注解支持.md)\n\n[DataFactory-02-正则表达式支持](doc/blog/DataFactory-02-正则表达式支持.md)\n\n[DataFactory-03-自定义注解](doc/blog/DataFactory-03-自定义注解.md)\n\n# Road-MAP\n\n- [ ] 支持多维数组\n\n- [ ] 支持全局配置\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoubb%2Fdata-factory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoubb%2Fdata-factory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoubb%2Fdata-factory/lists"}