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

9

У меня есть иерархия классов Java, которые образованы абстрактным классом и его N-расширениями. В абстрактном классе у меня есть метод, который аннотируется аннотацией @Remove. Несмотря на то, что мы не получим никаких исключений, мы не получим быстрый отказ, если эта аннотация будет удалена, мы можем получить исключения из памяти, поэтому я хотел бы быть уверен, что мы заметим как можно быстрее, если эта аннотация исчезнет при некотором рефакторинге.

Я пытаюсь создать GUTS (хорошие модульные тесты), поэтому я подумал, что смогу задокументировать это «техническое требование» в своих тестах с помощью контрольного примера, в котором оно указано.

Но это не особенность, это как деталь реализации, и она не связана с поведением метода (метод может быть пустым, но он должен существовать и должен быть аннотирован).

Можно ли создать тест для этого или есть какой-то другой способ проверить наличие этой аннотации?

И.С.Бах
источник
1
Вы спрашиваете, как это сделать, или это хорошая практика разработки программного обеспечения? Ответ на последний - да. Тесты проверяют качество вашей кодовой базы; они не обязательно проверяют текущее поведение . Совершенно нормально иметь тесты, которые проверяют условия, способствующие хорошему поведению в будущем .
Килиан Фот

Ответы:

5

Да, создайте юнит-тест. Вы говорите, что если аннотация будет удалена, то вы можете избавиться от ошибок памяти в работе. Это было бы убийственной ошибкой. Позволить этому случиться из-за некоторой идеи, что тесты должны как-то ограничиваться, контрпродуктивно. Тесты должны проверять правильность во всех смыслах. Чем раньше вы обнаружите возможную проблему, тем лучше, так что проведение модульного теста и сбой сборки CI - это надежный способ предотвратить ошибку. Попытка изобрести другой механизм для предотвращения появления такой ошибки, кажется, не стоит. Каждому новому разработчику нужно будет дать объяснение того, как обрабатывать «особый случай» ни одного теста функциональной корректности. Это, скорее всего, не очень хорошее время разработчика.

Команды редактирования, которые выполняют BDD, скорее всего, отделят функциональный бизнес-тест от технических тестов, таких как тесты производительности. Обычно команды имеют разные типы тестов, включая интеграционные тесты, которые запускаются реже, чем их основные тесты бизнес-логики. Обычно это делается с помощью профилей сборки, чтобы разработчики в своем потоке могли часто выполнять быстрые тесты бизнес-логики и более медленные интеграционные тесты, прежде чем они передадут код. Сборка CI запустит все тесты.

simbo1905
источник
2

Когда критическая функция реализуется с помощью такой декларативной техники, как я, я предпочитаю использовать интеграционный тест, который включает часть инфраструктуры, которая распознает объявление. Это защищает вас от изменений в поведении фреймворка, недопонимания эффекта декларации и т. Д. Простое тестирование наличия аннотации не гарантирует какого-либо конкретного поведения.

Жюль
источник
Привет! Это интересно, как бы вы проверили поведение аннотации @remove, например?
JSBach
К сожалению, я недостаточно знаком с EJB, чтобы ответить на этот вопрос - я стараюсь избегать работы с технологией именно потому, что мне трудно писать хорошие тесты для.
Жюль
Идея этой аннотации заключается в том, что она сообщает контейнеру, что компонент может быть удален. К сожалению, сложно проверить это поведение :(
JSBach