Тестирование 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", однако его значение, безусловно, будет различным для объектов разных классов.

Другие вопросы по тегам