Почему исторически сложилось использовать Cucumber
Что проверяют
Понимаете ли вы, что Cucumber решает задачу общения, а не задачу запуска тестов. На JVM это часто унаследованный слой, и от кандидата ждут, что он объяснит, как он устроен и когда от него отказываются, а не перескажет рекламу BDD.
Как отвечать
Историю дайте коротко. Инструмент вырос из Ruby-сообщества как развитие идеи исполняемых спецификаций, затем появился порт на JVM, и вместе с ним язык Gherkin с конструкциями Given, When, Then. Смысл был в том, чтобы критерии приёмки, тест и отчёт стали одним артефактом, который читает и бизнес, и код.
Дальше про устройство на Java, это и проверяют. Сценарии лежат в файлах с расширением feature, шаги связываются с кодом аннотациями, запуск идёт через JUnit Platform отдельным движком, состояние между шагами передаётся контейнером внедрения зависимостей, чаще всего через интеграцию со Spring.
@When("клиент переводит {int} рублей")
public void transfer(int amount) { ... }Сильный ответ заканчивается границей применимости: слой Gherkin окупается, когда сценарии действительно читают и правят вне команды разработки. Если файлы пишут те же инженеры, которые пишут шаги, это лишний уровень косвенности, и обычный JUnit с понятными утверждениями читается лучше.
Где спотыкаются
Называют Cucumber фреймворком автотестов. Он ничего не умеет сам: браузером управляет драйвер, к API ходит клиент, проверки пишутся обычными библиотеками. Cucumber только связывает текст сценария с кодом шагов и собирает отчёт.
Пишут императивные сценарии. Строки вида «нажать кнопку, ввести значение в поле» превращают Gherkin в скрипт на неудобном языке, ломаются от любой правки интерфейса и никому не читаются. Уровень описания должен быть деловым: клиент оплатил заказ, заказ перешёл в новый статус.
Не думают про коллизии шагов и общее состояние. Пересекающиеся выражения дают неоднозначность, которая обнаруживается только при запуске, а состояние в статических полях ломает параллельный прогон. Шаги не функции, переиспользовать их вызовом друг из друга не стоит, общая логика выносится в обычные классы.