2009-03-24 2 views
14

Я недавно начал создавать свои собственные аннотации и для спорта TDD/BDD, я бы хотел, чтобы модуль тестировал мои аннотации, чтобы создать четкую спецификацию для них. Тем не менее, поскольку аннотации - это в основном просто причудливые интерфейсы, которые, насколько мне известно, не могут быть действительно созданы напрямую, есть ли какой-либо способ, чтобы отразить единичный тест аннотации?Можно ли тестировать Java-аннотации?

ответ

8

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

Это будет работать только с аннотациями Runtime, которые, конечно, будут указаны на правильных объектах.

По моему опыту, сами аннотации редко достаточно интересны, чтобы гарантировать единичные тесты - обычно это код, который использует их для тестирования. Но тогда я не из 100% -ной школы по охвату кода :-)

+1

Было бы здорово объединить тесты времени компиляции - например: http://code.google.com/p/javadude/ вики/аннотации. Это серьезная боль для тестирования! (У меня есть «тестовые» и «ожидаемые» копии проекта, которые я сравниваю после компиляции ...) –

0

Вы не можете протестировать их напрямую, поскольку, как вы отметили, нет ничего, что можно было бы проверить. Можно доказать некоторые вещи, хотя:

  • объектов с аннотациями в коде есть какие-либо ожидаемые аннотации во время выполнения
  • Значения по умолчанию было инициализированы
  • аннотаций связываются с вещами, которые вы ожидаете их

Когда вы тестируете устройство, одна из вещей, которые вы можете доказать, заключается в том, что ваша реализация соответствует интерфейсу. Итак, если аннотация подразумевает определенное поведение или свойства (например, Serializable все должно быть сериализуемо), вы хотели бы представить это и в своих тестах.

1

Вы можете выполнить единичный тест, если ваше определение аннотации в порядке: может ли оно применяться к действительному набору элементов, доступно ли оно во время выполнения, если значение по умолчанию правильно инициализировано? Затем, позже, модуль проверит класс, который обработает вашу аннотацию.

8

Аннотации имеют некоторое влияние (в противном случае было бы бессмысленно использовать их). Поэтому не проверяйте присутствие аннотации, но эффект должен иметь.

Смежные вопросы