Тестирование BeanUtils / test должно завершиться сбоем при создании нового свойства - PullRequest
5 голосов
/ 15 октября 2011

Я использую BeanUtils для сопоставления некоторого класса DTO с классами домена (и наоборот).(используя свойства копирования BeanUtils)

Я хочу проверить свой код.Как мне написать тест, который не будет выполнен, если кто-то напишет, создаст дополнительное свойство в классе DTO или Domain.

Моя попытка, над которой я все еще работаю, состоит в том, чтобы обойти BeanUtils.getPropertyDescriptors (class) и найтисоответствующие методы получения THEN для каждого класса (DTO и Domain) проверяют на равенство.

Есть мысли?

Из-за ограничений зависимости проекта я бы предпочел не использовать что-то вроде Dozer.Я использую beanutils весны 3.

1 Ответ

1 голос
/ 21 октября 2011

Если вас интересует только тестирование дополнительных свойств, ваш метод тестирования может выглядеть следующим образом:

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

...