Платформа тестирования Java bean
Существует ли фреймворк или библиотека, которая, получив JavaBean, "проведет его через свои шаги", т. е. проверит все геттеры и сеттеры, проверит, что свойство соответствует геттерам и сеттерам и т. д.?
6 ответов:
Лично я не думаю, что это самая трудная часть тестирования. Это можно было бы сделать с помощью рефлексии,но это не то, что делает тестирование стоящим.
Самое трудное-это вычислить все возможные входные данные для "счастливого пути" и ошибочных ситуаций, убедиться, что исключения создаются, когда они должны быть и т. д.
Ваш Java-Боб должен реализовывать equals и hashCode. Я больше беспокоюсь о тесты для проверки равна контракта: нуль равняется, рефлексивность, симметричность, транзитивные, а не равные. Это не тривиально.
Добытчики и сеттеры-наименьшая из ваших проблем. Когда люди говорят о стандартах покрытия кода 70% или выше, они часто говорят, что геттеры и сеттеры могут быть исключены.
Хотя я согласен, что есть более серьезные проблемы для решения, есть случаи для тестирования методов Java bean. Большие команды команды, работающие с большими кодовыми базами, могут столкнуться с проблемами. Я видел несколько случаев ошибки копирования / вставки, приводящей к геттерам или сеттерам, работающим с неправильным свойством. Забывчивость может привести к тому, что методы hashCode и equals станут несовместимыми. Поиск ошибок в этом простом коде может быть очень неприятным.
Bean Matchers - это библиотека, которая может помочь в этом отношении. Оно предоставляет серию сопоставителей Hamcrest для рефлексивного тестирования Java beans. Например:
@Test public void testBean() { assertThat(MyBean.class, allOf( hasValidBeanConstructor(), hasValidGettersAndSetters(), hasValidBeanHashCode(), hasValidBeanEquals(), hasValidBeanToString() )); }
Взгляните на утилиты тестирования отражения:
Хотя, если вы тестируете сгенерированные методы (основанные на полях в классе), это может не стоить того.
Если вы не выглядите как что-то более причудливое, как http://commons.apache.org/validator/ я бы рекомендовал написать свой собственный. Лично мне не нравятся чистые объекты хранения данных без какого - либо поведения-это не очень хороший дизайн. Поэтому, если меня не заставляют работать с такими объектами (работая с j2ee f. e.), я стараюсь избавиться от них.
Можно попробовать http://oval.sourceforge.net/ овал позволяет использовать аннотации на бобах, а затем выполнить метод проверки. Он не полностью совместим с JSR303. Если вы хотите использовать что-то полностью совместимое, вы должны проверить Hibernate Validator.
Как и сообщение выше, определенно проверьте Apache commons validator.
Я думаю, что эта библиотека-ответ на ваш вопрос: http://outsidemybox.github.com/testUtils/
Он проверяет все начальные значения Боба, сеттеры, геттеры, хэш-код (), equals () и toString (). Все, что вам нужно сделать, это определить карту свойств/значений по умолчанию и не по умолчанию.
Он также может тестировать объекты, которые являются бобами с дополнительными конструкторами не по умолчанию.