Инфраструктура тестирования Java-бинов - PullRequest
4 голосов
/ 21 июля 2010

Имеется ли инфраструктура или библиотека, которая, когда ей предоставляется JavaBean, "проверит его темп", т. Е. Проверит все методы получения и установки, подтвердит, что свойство соответствует методам получения и установки и т. Д.*

Ответы [ 6 ]

8 голосов
/ 21 июля 2010

Лично я не думаю, что это самая сложная часть тестирования. Это можно сделать с помощью рефлексии, но это не то, что делает тестирование стоящим.

Сложная задача - выяснить все возможные входные данные для «счастливого пути» и ошибочных ситуаций, убедиться, что исключения генерируются, когда они должны быть, и т. Д.

Ваш Java Bean должен реализовывать equals и hashCode. Я бы больше беспокоился о тестах для проверки контракта на равенство: нулевых равных, рефлексивных, симметричных, транзитивных и не равных. Это не тривиально.

Методы получения и установки - это наименьшая из ваших проблем. Когда люди говорят о стандартах покрытия кода на уровне 70% или выше, они часто говорят, что геттеры и сеттеры могут быть опущены.

5 голосов
/ 31 марта 2013

Хотя я согласен с тем, что есть большие проблемы, которые нужно решить, есть случаи для тестирования методов Java bean. Большие команды команды, работающие над большими кодовыми базами, могут столкнуться с проблемами. Я видел несколько случаев ошибок копирования / вставки, приводящих к тому, что методы получения или установки работают с неверным свойством. Забывчивость может привести к тому, что hashCode и методы equals станут несовместимыми. Поиск ошибок в этом простом коде может быть очень неприятным.

Bean Matchers - библиотека, которая может помочь в этом отношении. Он предоставляет серию сопоставителей Hamcrest для рефлективного тестирования Java-бинов. Например:

@Test
public void testBean() {
    assertThat(MyBean.class, allOf(
            hasValidBeanConstructor(),
            hasValidGettersAndSetters(),
            hasValidBeanHashCode(),
            hasValidBeanEquals(),
            hasValidBeanToString()
    ));
}
2 голосов
/ 21 июля 2010

Взгляните на утилиты тестирования отражения:

http://code.google.com/p/rtu/

Хотя, если вы тестируете сгенерированные методы (основанные на полях в классе), это может не стоить того.

1 голос
/ 21 июля 2010

Вы можете попробовать http://oval.sourceforge.net/ Oval, он позволяет вам использовать аннотации для ваших bean-компонентов и затем выполнить метод validate. Он не полностью соответствует JSR303. Если вы хотите использовать что-то полностью совместимое, вы должны проверить Hibernate Validator.

Как и в приведенном выше сообщении, обязательно проверьте валидатор Apache Commons.

1 голос
/ 21 июля 2010

Если вы не похожи на что-то более причудливое, например http://commons.apache.org/validator/, я бы порекомендовал написать свое. Лично мне не нравятся чистые данные, содержащие объекты без какого-либо поведения - это не очень хороший дизайн. Поэтому, если я не вынужден работать с такими объектами (работая с j2ee и т. Д.), Я пытаюсь избавиться от них.

0 голосов
/ 03 марта 2011

Полагаю, эта библиотека - ответ на ваш вопрос: http://outsidemybox.github.com/testUtils/

проверяет все начальные значения бина, методы установки, методы получения, hashCode (), equals () и toString (). Все, что вам нужно сделать, это определить карту по умолчанию и не свойство / значение по умолчанию.

Он также может тестировать объекты, являющиеся bean-компонентами, с дополнительными конструкторами не по умолчанию.

...