利用BeanUtils.copyProperties实现Java Pojo的单元测试覆盖

Contents
Java Pojo及普通的javaBean类,里面都是private 元素和Getter、Setter、toString等方法,我更喜欢把它称之为数据模型类(Model)。
在Java项目一般都有大量的Pojo类文件,如果对他们一个一个的进行单元测试的覆盖就很枯燥,也没有意义。下面就使用Spring 的BeanUtils.copyProperties方法来实现自动的测试覆盖。
基本思路是这样子的,利用BeanUtils.copyProperties对两个Pojo类实例的属性copy,这个过程会分别调用两个实例的Getter和Setter方法,从而实现Getter和Setter方法的覆盖,加上使用反射获取所有的类对象。
package com.icharm.pojo.test;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.List;
public class BeanDmoTest {
String CLASSPATH_ALL_URL_PREFIX = "classpath:";
@Test
public void beanTest() throws Exception {
List list = new ArrayList();
list.add("com.xxx.a.dto");
list.add("com.xxx.b.dto");
list.add("com.xxx.c.dto");
for (String path : list) {
// 包名转路径
path = path.replaceAll("\\.", "\\/");
String packageSearchPath = CLASSPATH_ALL_URL_PREFIX + path + "/**/*.class";
// 获取所有的Pojo类
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resourcePatternResolver.getResources(packageSearchPath);
// 遍历
for (Resource r : resources) {
// 获取类名
String name = r.getURL().getPath();
name = name.substring(name.indexOf("com"), name.lastIndexOf("."));
name = name.replaceAll("/", ".");
// 获取类对象
Class c = this.getClass().getClassLoader().loadClass(name);
copyBean(c);
}
}
}
private void copyBean(Class c) throws Exception {
// 生成两个实例
Object dest = c.newInstance();
Object orig = c.newInstance();
// 测试toString方法
dest.toString();
// 测试Getter Setter方法
BeanUtils.copyProperties(dest, orig);
}
}