Могут ли аннотации Java подвергаться модульному тестированию?

StackOverflow https://stackoverflow.com/questions/676620

  •  21-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top