Функциональные тесты, как и в случае с огурцом, сильно отличаются от модульных тестов. Модульный тест должен проверять единицу работы на уровне метода / класса. В идеале они не должны проверять взаимодействие между всей системой. Они должны быть быстрыми и изолированными (см. http://agileinaflash.blogspot.com/2009/02/first.html)
Вот где приходит Cucumber. Он обеспечивает фронт, где клиенты могут помочь определить, что они хотят, чтобы приложение делало, а затем вы пишете тесты, которые его реализуют. Это означает, что слой огурца, скорее всего, находится прямо на том же уровне, что и пользовательский интерфейс (и, следовательно, не позволяет вам размещать логику в вашем пользовательском интерфейсе в качестве бонуса)
В будущем, когда ваш клиент захочет изменить функциональность, вы можете открыть тест, изменить его ожидания (С клиентом) и затем кодировать изменения. Подключите все это к CI и вам хорошо идти.