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

时间:2011-10-14 21:54:06

标签: java spring unit-testing apache-commons-beanutils

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

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

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

有什么想法吗?

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

1 个答案:

答案 0 :(得分: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");
    }

}

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