在日常的测试中,我们经常需要提前准备一大堆测试数据,用来验证业务逻辑。当然对于简单的数据类型完全可以通过 JDK 自带的 Random 类来实现。但是对于一个比较复杂的类,或者参数的格式有特殊要求的时候,Random 就不适用了,这个时候就需要借助一些能够生成测试数据的框架。
我在实际调研中,找到了 2 个在个人看来还不错的生成框架,他们分别是:
jmockdata[1]
java-faker[2]
下面我将一一介绍这些框架的优缺点以及适用场景。话不多说,直接开始撸代码。
首先出场的是 JmockData 框架,它是官方定义如下:
一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。
依赖
- <dependency>
- <groupId>com.github.jsonzou</groupId>
- <artifactId>jmockdata</artifactId>
- <version>4.2.0</version>
- </dependency>
基础类型数据生成
- @Test
- public void testBaseType(){
- // 基础数据类型
- System.out.println(JMockData.mock(byte.class));
- System.out.println(JMockData.mock(int.class));
- System.out.println(JMockData.mock(long.class));
- System.out.println(JMockData.mock(double.class));
- System.out.println(JMockData.mock(float.class));
- System.out.println(JMockData.mock(String.class));
- System.out.println(JMockData.mock(BigDecimal.class));
-
- // 基础数据类型的数组
- System.out.println(JMockData.mock(byte[].class));
- System.out.println(JMockData.mock(int[].class));
- System.out.println(JMockData.mock(long[].class));
- System.out.println(JMockData.mock(double[].class));
- System.out.println(JMockData.mock(float[].class));
- System.out.println(JMockData.mock(String[].class));
- System.out.println(JMockData.mock(BigDecimal[].class));
- }
运行结果
- 0
- 2610
- 3401
- 8582.18
- 7194.44
- 5Xu7
- 9051.92
- [B@7fbe847c
- [I@41975e01
- [J@c2e1f26
- [D@dcf3e99
- [F@6d9c638
- [Ljava.lang.String;@7dc5e7b4
- [Ljava.math.BigDecimal;@1ee0005
JavaBean 类型数据生成
- /**
- * java bean 测试
- */
- @Test
- public void testJavaBean(){
- Person mock = JMockData.mock(Person.class);
- System.ou