美文网首页Java 杂谈
用java实现的单测数据校验器

用java实现的单测数据校验器

作者: 小小浪把_Dont_know拍 | 来源:发表于2017-12-14 09:18 被阅读15次

最近写单测,需要枚举对象的元素来比对,感觉太麻烦了:

    @Test
    public void get_on_normalCase() {
        User result = get();
        User expected = generateExpected();

        assertEquals(expected.getBuyerId(), result.getBuyerId());
        assertEquals(expected.getFansId(), result.getFansId());
        assertEquals(expected.getFansType(), result.getFansType());
        assertEquals(expected.getNobody(), expected.getNobody());
    }

spring bean中有个方便的方法:

BeanUtils.copyProperties(activity, target);

于是打算参考一下它的源码,实现一个通用的数据检验。
原理其实也挺简单,基本上就是一个反射,一个调用java bean信息的接口就可以实现了。


import com.dpriest.tool.automan.User;
import org.junit.Test;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

/**
 * Created by zhangwenhao on 13/12/2017.
 */
public class DataComparator {
    /**
     * @param expected expected value
     * @param actual the value to check against <code>expected</code>
     */
    public static void compare(Object expected, Object actual) {
        Class<?> expectedClass = expected.getClass();
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(expectedClass);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                Method readMethod = propertyDescriptor.getReadMethod();
                Object expectedValue = readMethod.invoke(expected);
                Object actualValue = readMethod.invoke(actual);
                if (!expectedValue.equals(actualValue)) {
                    fail(propertyDescriptor.getName() + " not equal \nexpected:" + expectedValue + "\n"
                            + "actual:" + actualValue);
                }
            }
        } catch (Exception e) {
            fail(e.getMessage());
        }
    }
}

最后直接引入DataComparator就可以比较了,非常方便:

    @Test
    public void get_on_normalCaseV2() {
        User result = get();
        User expected = generateExpected();

        DataComparator.compare(expected, result);
    }

这个工具类目前仅支持简单对象属性,集合对象属性可以稍微改一下就可以用了。

相关文章

  • 用java实现的单测数据校验器

    最近写单测,需要枚举对象的元素来比对,感觉太麻烦了: spring bean中有个方便的方法: 于是打算参考一下它...

  • {C#-05B} 单测.比较器

    背景 单测比较复杂对象(ex.数据表)时,必须自定义比较器 比较器例 单测例

  • 校验器

    数据通过校验器校验,如果校验不通过,拦截器抛出错误,校验器下面的代码就不能继续执行。 拓展:校验器负责数据校验,拦...

  • Spring核心——数据校验

    在Java数据校验详解中详细介绍了Java数据校验相关的功能(简称Bean Validation,涵盖JSR-30...

  • 使用 GitLab CI/CD 和阿里云 CLI 自动部署前端项

    一、什么是 CI/CD? CI(持续交付)是功能迭代后自动构建、打包、校验代码格式、跑单测、单测覆盖率,常见的就是...

  • 数据校验器架构模式组

    问题引出 隔离校验器 代码如下: 清单 1: UserInfoValidator.java 可组装校验器 清单 2...

  • 单例模式

    1.利用装饰器实现单例模式 2.修改new方法实现单例模式 3.利用元类实现单例模式 总结: 用装饰器和元类实现的...

  • Java业务校验工具实现(续集)

    一、背景 在前面的文章分享了一篇自已关于Java业务校验工具的实现Java业务校验工具实现,后面本着“不要重复造轮...

  • 枚举来实现单例

    双重校验锁 实现单例: 枚举 实现单例: 上面的双重锁校验的代码很臃肿,是因为大部分代码都是在保证线程安全。为了在...

  • 乱七八糟的基础知识

    JAVA编译过程 源文件—>java编译器—>字节码文件—>(类装载器—>字节码校验器—>解释器)—>系统平台 字...

网友评论

    本文标题:用java实现的单测数据校验器

    本文链接:https://www.haomeiwen.com/subject/ujehwxtx.html