PODAM - Java 对象随机数填充器-属性随机赋值 Mock bean

最近,一个需求让我们接触到了 PODAM,可以自动使用随机数据填充Java 对象原始属性。

缘起

编写代码过程中,测试代码的广覆盖,往往能保证代码的健壮性。
完善的测试用例也能便于后期迭代开发。

测试数据增删改查过程中,最常见的莫过于初始化一个对象,然后将其插入到数据库中。

于是,下面的代码,就占用了测试代码的大部分篇幅:

Street street = new Street();
street.setNumber(12);
street.setType((byte) 1);
street.setName("Oxford street");

Address address = new Address();
address.setStreet(street);
address.setZipCode("123456");
address.setCity("London");
address.setCountry("United Kingdom");

Person person = new Person();
person.setFirstName("Foo");
person.setLastName("Bar");
person.setEmail("foo.bar@gmail.com");
person.setGender(Gender.MALE);
person.setAddress(address);

上面的代码没有任何技术含量,而且主观性比较强,开发人员会造一些期望的数据,从而导致一些意外的常见难以覆盖到。

探索

最为开发人员,这种机械又重复性的工作,当然想利用程序自动处理。

于是,我们维护了一个 RandomBean 的工具类,用于随机给对象赋值。

直到有一天,我打开这个类,发现已经上千行。。。

这么简单一个工具,需要这么多代码,我浏览了一下代码。

最初美好的幻想,被无情的需求拍打。

原来,虽然最开始这个类只是简单对整数、字符串、集合等常见类型做处理。

但是后来,各种日期类型、枚举、对象的嵌套等等场景都需要去适配。

更麻烦的是,有些数据对格式有一定要求,比如某个字符串只能有 2 个长度,某个字符串实际上是数字,之后需要转换为 BigDecimal 使用,等等。。。

救星

既然这个这么难维护,有没有现成的*可以用呢。万能的 Github 一番寻找,找到了 PODAM

使用 PODAM

加入依赖:

<dependency>
  <groupId>uk.co.jemos.podam</groupId>
  <artifactId>podam</artifactId>
  <version>[latest.version]</version>
  <!-- <scope>test</scope> -->
</dependency>

初始化一个 PodamFactory


@Bean
public PodamFactory PodamFactory(){
	new PodamFactoryImpl();
}

项目中可以直接注入使用:

        @Resource
        private PodamFactory factory;
		
		@Test
		public void testSimplePojo() {
				SimplePojoToTestSetters pojo = factory
								.manufacturePojo(SimplePojoToTestSetters.class);
				Assert.assertNotNull("The pojo cannot be null!", pojo);
				...etc
		}

上一篇:Java-Mapbox Android:如何获取从当前位置到您选择的目的地的路线?


下一篇:LeetCode 模拟行走机器人(图解+蛮力法)