Тестирование BeanUtils / test должно завершиться сбоем при создании нового свойства
Я использую BeanUtils для сопоставления некоторого класса DTO с классами домена (и наоборот). (используя свойства копирования BeanUtils)
Я хочу проверить свой код. Как мне написать тест, который не пройдёт, если кто-то напишет, создаст дополнительное свойство в классе DTO или Domain.
Моя попытка, над которой я все еще работаю, состоит в том, чтобы обойти BeanUtils.getPropertyDescriptors(class) и найти соответствующие методы получения THEN для каждого класса (DTO и Domain), проверяющего на равенство.
Какие-нибудь мысли?
Из-за ограничений проекта, я бы предпочел не использовать что-то вроде Dozer. Я использую beanutils весны 3.
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");
}
}
Если вас интересует тестирование самого сопоставления, тогда ваш подход с вызовом геттеров для каждого свойства, существующего в обоих классах, и проверкой их результатов на равенство должен работать. Не забывайте о свойстве "class", однако его значение, безусловно, будет различным для объектов разных классов.