Contents

利用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);
    }

}