Могут ли аннотации Java быть модульными?
Недавно я начал создавать свои собственные аннотации и для спорта TDD/BDD, я хочу, чтобы unit test мои аннотации, чтобы создать четкую спецификацию для них. Тем не менее, поскольку аннотации - это в основном просто причудливые интерфейсы, которые, насколько мне известно, не могут быть действительно созданы напрямую, есть ли какой-либо способ, не отражающий unit test аннотацию?
Ответы
Ответ 1
Это не то, для чего я обычно писал тесты, но вы могли бы просто создать набор тестовых классов, которые используют и злоупотребляют аннотацией, чтобы проверить, что он хранит значения его членов, что он имеет правильные значения по умолчанию и т.д.
Это будет работать только с аннотациями Runtime, которые, конечно, будут указаны на правильных объектах.
По моему опыту, сами аннотации редко достаточно интересны, чтобы гарантировать единичные тесты - обычно это код, который использует их для тестирования. Но тогда я не из 100% -ной школы по охвату кода: -)
Ответ 2
Аннотации имеют некоторое влияние (в противном случае было бы бессмысленно использовать их). Поэтому не проверяйте присутствие аннотации, но эффект, который он должен иметь.
Ответ 3
Вы можете unit test, если ваше определение аннотации в порядке: может ли оно применяться к допустимому набору элементов, доступно ли оно во время выполнения, если значение по умолчанию правильно инициализировано?
Затем, далее, unit test класс, который обработает вашу аннотацию.
Ответ 4
Вы не можете проверить их напрямую, поскольку, как вы отметили, там ничего не существует. Однако вы можете доказать некоторые вещи:
- Объекты с аннотациями в коде имеют любые ожидаемые аннотации во время выполнения
- Значения по умолчанию были инициализированы
- Аннотации привязаны к тем, что вы ожидаете от них.
Когда вы unit test, одна из вещей, которую вы можете доказать, заключается в том, что ваша реализация соответствует интерфейсу. Поэтому, если аннотация подразумевает определенное поведение или свойства (например, Serializable
вещи действительно должны быть serializable), вы также хотели бы представить это в своих тестах.