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); } }
Comments | NOTHING