Могут ли аннотации Java быть проверены модулем? - PullRequest
14 голосов
/ 24 марта 2009

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

Ответы [ 4 ]

8 голосов
/ 24 марта 2009

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

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

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

8 голосов
/ 24 марта 2009

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

1 голос
/ 24 марта 2009

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

0 голосов
/ 24 марта 2009

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

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

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

...