Платформа тестирования Java bean


Существует ли фреймворк или библиотека, которая, получив JavaBean, "проведет его через свои шаги", т. е. проверит все геттеры и сеттеры, проверит, что свойство соответствует геттерам и сеттерам и т. д.?

6 4

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://code.google.com/p/rtu/

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

Если вы не выглядите как что-то более причудливое, как 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 (). Все, что вам нужно сделать, это определить карту свойств/значений по умолчанию и не по умолчанию.

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