我正在使用BeanUtils将一些DTO类映射到Domain类(反之亦然)。 (使用BeanUtils复制属性)
我想测试我的代码。如果有人在DTO或Domain类中创建了额外的属性,如何编写将失败的测试。
我正在尝试的尝试是遍历BeanUtils.getPropertyDescriptors(类)并找到相应的getter方法THEN为每个类(DTO和Domain)测试是否相等。
有什么想法吗?
由于项目依赖性限制,我宁愿不使用像Dozer这样的东西。我正在使用spring 3的beanutils。
答案 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”属性,它的值对于不同类的对象肯定会有所不同。