Каковы некоторые стратегии написания тестов 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'
Как этот тест мог быть успешным, если / пока в систему не были введены некоторые "фиктивные" друзья?
Более конкретно, какие "фиктивные" критерии будет использовать тест?
Должен ли я жестко закодировать имя друга, предполагая, что оно уже существует в базе данных?
Но что если я перенесу свой код в новую среду с новой базой данных?
Или я должен написать код для ручной вставки фиктивных данных в систему перед выполнением каждого теста?
Но это изменило бы внутреннее состояние приложения из тестовой среды, что кажется плохим подходом, поскольку мы должны рассматривать программу как черный ящик, и работать только через интерфейс.
Или я бы создал другие сценарии / тесты, в которых данные создаются с использованием интерфейса программы?
Например, «Добавление: добавление нового друга в мой список». Затем я мог бы запустить этот тест, чтобы добавить пользователя с именем «Люси», а затем запустить тесты «Поиск друга» для поиска «Люси», который теперь будет существовать в базе данных.
Но , тогда я бы вводил зависимости между моими сценариями, что противоречит общему совету, что тесты должны выполняться независимо.
Какая стратегия лучшая? Или есть лучший способ?