在创建新属性时,测试BeanUtils/test应该失败

use*_*545 5 java spring unit-testing apache-commons-beanutils

我正在使用BeanUtils将一些DTO类映射到Domain类(反之亦然).(使用BeanUtils复制属性)

我想测试我的代码.如果某人在DTO或Domain类中创建了额外的属性,如何编写将失败的测试.

我正在尝试的尝试是遍历BeanUtils.getPropertyDescriptors(类)并找到相应的getter方法THEN为每个类(DTO和Domain)测试是否相等.

有什么想法吗?

由于项目依赖性约束,我宁愿不使用像Dozer这样的东西.我正在使用spring 3的beanutils.

soc*_*a23 1

如果您只关心测试额外的属性,您的测试方法可能如下所示:

void assertSameProperties(Class class1, Class class2) {
    Set<String> properties = new HashSet<String>();
    for (PropertyDescriptor prop : BeanUtils.getPropertyDescriptors(class1)) {
        properties.add(prop.getName());
    }
    for (PropertyDescriptor prop : BeanUtils.getPropertyDescriptors(class2)) {
        if (!properties.remove(prop.getName()) {
            fail("Class " + class2.getName() + " has extra property " + prop.getName());
        }
    }
    if (!properties.isEmpty()) {
        fail("Class " + class1.getName() + " has extra properties");
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您关心测试映射本身,那么为两个类中存在的每个属性调用 getter 并检查它们的结果是否相等的方法应该可行。不过,请记住“类”属性,对于不同类的对象,其值肯定会有所不同。