Какие существуют стратегии для написания тестов BDD, которые могут проверять поведение, основанное на определенных данных, находящихся в системе?
Например, скажем, я работал со следующим сценарием:
Feature: Search for friend
In order to find a friend
As a user
I want to search my list of friends
And filter by 'first name'
Как этот тест мог быть успешным, если / до тех пор, пока в систему не были введены какие-то «фиктивные» друзья?
Более конкретно, что за «пустышка» критерии, которые будет использовать тест?
Следует ли мне жестко закодировать имя друга, предполагая, что оно уже существует в базе данных?
Но что, если я перенесу свой код в новую среду с новой базой данных ?
Или мне следует написать код для ручной вставки фиктивных данных в систему перед выполнением каждого теста?
Но это будет изменение внутреннего состояния приложения изнутри тестовой среды, что похоже на плохой подход, поскольку мы должны рассматривать программу как черный ящик и иметь дело с ней только через интерфейс.
Или я бы создал другие сценарии / тесты, в которых данные создаются с использованием интерфейс программы?
Например, «Функция: Добавить нового друга в мой список». Затем я мог запустить этот тест, чтобы добавить пользователя по имени «Люси», а затем запустить «Поиск друга». тесты для поиска «Люси», которые теперь будут существовать в базе данных.
Но , тогда я бы ввел зависимости между моими сценариями, что противоречит общему совету о том, что тесты должны выполняться независимо.
Какая из них лучшая стратегия? Или есть способ лучше?