У меня есть иерархия классов Java, которые образованы абстрактным классом и его N-расширениями. В абстрактном классе у меня есть метод, который аннотируется аннотацией @Remove. Несмотря на то, что мы не получим никаких исключений, мы не получим быстрый отказ, если эта аннотация будет удалена, мы можем получить исключения из памяти, поэтому я хотел бы быть уверен, что мы заметим как можно быстрее, если эта аннотация исчезнет при некотором рефакторинге.
Я пытаюсь создать GUTS (хорошие модульные тесты), поэтому я подумал, что смогу задокументировать это «техническое требование» в своих тестах с помощью контрольного примера, в котором оно указано.
Но это не особенность, это как деталь реализации, и она не связана с поведением метода (метод может быть пустым, но он должен существовать и должен быть аннотирован).
Можно ли создать тест для этого или есть какой-то другой способ проверить наличие этой аннотации?
источник
Ответы:
Да, создайте юнит-тест. Вы говорите, что если аннотация будет удалена, то вы можете избавиться от ошибок памяти в работе. Это было бы убийственной ошибкой. Позволить этому случиться из-за некоторой идеи, что тесты должны как-то ограничиваться, контрпродуктивно. Тесты должны проверять правильность во всех смыслах. Чем раньше вы обнаружите возможную проблему, тем лучше, так что проведение модульного теста и сбой сборки CI - это надежный способ предотвратить ошибку. Попытка изобрести другой механизм для предотвращения появления такой ошибки, кажется, не стоит. Каждому новому разработчику нужно будет дать объяснение того, как обрабатывать «особый случай» ни одного теста функциональной корректности. Это, скорее всего, не очень хорошее время разработчика.
Команды редактирования, которые выполняют BDD, скорее всего, отделят функциональный бизнес-тест от технических тестов, таких как тесты производительности. Обычно команды имеют разные типы тестов, включая интеграционные тесты, которые запускаются реже, чем их основные тесты бизнес-логики. Обычно это делается с помощью профилей сборки, чтобы разработчики в своем потоке могли часто выполнять быстрые тесты бизнес-логики и более медленные интеграционные тесты, прежде чем они передадут код. Сборка CI запустит все тесты.
источник
Когда критическая функция реализуется с помощью такой декларативной техники, как я, я предпочитаю использовать интеграционный тест, который включает часть инфраструктуры, которая распознает объявление. Это защищает вас от изменений в поведении фреймворка, недопонимания эффекта декларации и т. Д. Простое тестирование наличия аннотации не гарантирует какого-либо конкретного поведения.
источник