Я пытаюсь написать несколько аннотаций, чтобы помочь связать методы тестового примера с различными метаданными. Мои аннотации на данный момент включают BugFix, UseCase и Requirement. Моя конечная цель - написать процессор аннотаций, чтобы отобразить, какие тестовые наборы связаны с отдельными исправлениями ошибок, вариантами использования и требованиями.
Когда я просто реализовывал это для своего собственного проекта, я создавал перечисления, специфичные для моего проекта, для каждой категории тестовой ассоциации. Например, у меня были перечисления ProjectUseCase, которые я мог передать в качестве значения аннотации UseCase в моих методах тестирования. Это позволило легко добавлять дополнительные варианты использования или изменять варианты использования в одном месте.
Теперь я хотел бы сделать этот код доступным для других разработчиков на моей работе. Конечно, они будут работать над другими проектами с различными вариантами использования, требованиями и исправлениями ошибок.
Вот проблемы, с которыми я сталкиваюсь:
- Enum нельзя расширять, поэтому у меня не может быть базового перечисления UseCase, которое другие могут расширять для своих собственных проектов.
- Значения свойств аннотации должны быть константами. Это не позволяет мне использовать маркер интерфейса (TestAssociation) в моих перечислениях и использовать интерфейс TestAssociation для значений моей аннотации. Кроме того, это не позволяет мне использовать значения String в моей аннотации и передавать имя перечисления при использовании аннотации, например: @UseCase (ProjectUseCase.GENERAL.name ()).
Из того, что я могу сказать, из-за этого мне остается только использовать необработанные строки для значений, что лишает меня безопасности типов и возможности быстрого рефакторинга. Использование классов констант Strings вместо перечислений, кажется, лучший способ справиться с этим, поскольку каждый разработчик может использовать свои собственные.
Единственное, о чем я могу думать, - это ссылаться на класс Enum (или класс констант Strings) и не включать этот класс в jar, предоставляя пользователям возможность его реализовать.
Есть предложения или обходные пути?
Я также хотел бы знать, существуют ли какие-либо проекты, уже предоставляющие аналогичные функции.