Почему вы думаете, что BDD и тестирование интеграции различны?
BDD просто означает, что вы управляете своим дизайном с помощью желаемого поведения, обычно выражаемого в комплекте приемочных испытаний.
Этими испытаниями могут быть «интеграционные тесты», которые включают в себя множество [микро] служб, или они могут быть тестами, которые определяют желаемое поведение отдельной службы или один класс в этой службе. В идеале на всех этих уровнях будет проведено множество тестов. Важно то, что вы указываете поведение, которое хотите, и используете его для управления разработкой.
Как ваша система реализована, в какой-то степени не имеет значения, если она демонстрирует ожидаемое поведение. Для тестов высокого уровня, которые рассматривают систему как черный ящик, это верно, и чем ниже вы идете, тем ближе вы к фактическому коду, это становится менее истинным (поскольку вы эффективно проверяете реализацию в этой точке).
Поэтому я хотел бы сосредоточиться на поведении, ожидаемом от новых функций, и сначала написать спецификации для этих приемочных испытаний, а затем реализовать ваши услуги для выполнения требуемого поведения, добавляя при необходимости более низкие уровни, используя прагматичный подход, имея в виду, что на более низком уровне тесты идут скорее, они должны быть хрупкими и нуждаться в изменении при изменении вашей реализации.
EDIT
На основе вашего вопроса редактирования.
Я не согласен с тем, что тесты BDD должны проверять только бизнес-логику. На самом деле обычно тесты BDD более сфокусированы на тестировании системы в целом, причем все части объединены вместе. Сказав, что BDD - это всего лишь стиль тестирования, указав желаемое поведение и может быть применен к любому уровню приложения. Вы можете протестировать один класс, указав поведение с использованием синтаксиса Gherkin, и мы иногда это делаем. мы также указываем ожидаемое поведение всей системы, используя Gherkin и ожидаемое поведение наших услуг по отдельности. Естественно, эти тесты будут немного отличаться от формата, который мы планируем.
Для системных тестов мы могли бы иметь спецификацию так:
Scenario: user can perform action A
Given I am a user with access to some feature A
And feature A is enabled for the user
When I call perform action A with parameters 'Bob' and 'John'
Then A 'BobJohn' is created
And notifications are sent to the current user
для отдельных услуг, которые мы могли бы иметь тесты, как
Scenario: create messages are handled correctly
Given the service is set up
When a message arrives to create a 'BobJohn'
Then a new entry is added to the database with the key 'BobJohn'
And an outgoing notification message for 'BobJohn' is created
Для отдельных классов мы могли бы иметь тесты, как
Scenario: Notifier class should send notifications via all users preferred means
Given the current user wants notification by Twitter
And the current user who wants notification by email
When I send the notification 'BobJohn' to the current user
Then the twitter notifier should be invoked with 'BobJohn'
And the email notifier should be invoked with 'BobJohn'
Это все тесты стиля BDD, но они проверяют различные аспекты sys ПЭМ.
Автор BDD в действии считает, что они совместимы: http://www.slideshare.net/wakaleo/bddriven-microservices – ngm
Благодарим вас за внимание. Я просто прочитал некоторые статьи, написанные JF Smart, мы разделяем те же взгляды на этот вопрос. Он говорит, что они совместимы на разных этапах развития. Если архитектура решения делает возможным (я надеюсь, что архитектура спуска позволяет это сделать), BDD оптимально подходит для бизнес-приемочных тестов. После того, как тесты приемочного тестирования в порядке, интеграционные тесты нацелены на тестирование решения против целевой инфраструктуры. Разделение проблем. Он утверждает, что отказ от принятия решений по умолчанию разработчикам от Integration Tests - пустая трата времени. Совместимо, но не то же самое. –