Подтвердить что ты не робот

Взаимозависимые аннотации

Можно ли пометить две аннотации как взаимоисключающие друг от друга?

У меня есть пользовательский бегун JUnit, и я хочу удостовериться, что если тест будет помечен моей аннотацией @Custom, обозначающей ее с помощью @Test, будет (желательно) выполнить компиляцию или (менее предпочтительно) время выполнения ошибка.

Причина, по которой я хочу, это то, что @Custom в основном @Test, но с некоторой дополнительной предварительной обработкой, прежде чем он начнет проверку. И, как я его закодировал, для каждого настраиваемого тега (да, там более одного), тест будет выполняться столько раз с соответствующей предварительной обработкой каждый раз. Таким образом, если он работает для @Test, также не имеет смысла, поскольку этот тест предназначен для предварительной обработки.

И, да, я хочу поддерживать как @Custom, так и @Test в моей структуре (хотя и не для одного и того же метода тестирования).

4b9b3361

Ответ 1

На самом деле нет никакого способа установить ограничения на то, какие аннотации вы можете поместить на элемент Java. Так, например, вы могли бы отметить поле как @Required и @Optional, хотя это было бы совершенно бессмысленно.

Вам нужно будет выполнить проверку во время выполнения, посмотрев, какие аннотации присутствуют, или просмотрев интересующий вас конкретный объект, а затем выбросив исключение (которое было бы уловлено unit test).

Может быть лучшее решение вашей конкретной проблемы. Если вы хотите специально изучить некоторые тестовые примеры, вам может понадобиться реализовать свой собственный тестовый бегун и использовать аннотацию @RunWith, чтобы вызвать его. Затем вы можете обеспечить, чтобы ваши методы @Custom получали необходимые условия.

Ответ 2

Вы можете использовать Обработку аннотации Java, чтобы сделать это для вас (вызывая операцию посткомпилирования, которая, в свою очередь, не справляется с задачей компиляции), но она излишне сложна. (Если вы действительно хотите, скажите мне, и я выкопаю этот код для вас). Легче было бы иметь небольшой класс, который вы вызываете вручную, который собирает информацию.

Точнее: вам нужно это для вас (вас самих и только вас) в качестве удобства или вам нужно для вашего огромного проекта в качестве автоматизированного решения (и готовы вложить в него некоторые усилия?)

Ответ 3

Так как код работает в вашей структуре, вы можете добавить коды AOP для проверки взаимоисключающего отношения, добавив pointCut ко всем классам, аннотированным с @Custom, и если также добавлен @Test, выведите исключение RuntimeException.