Всем привет,
у меня такой вопрос по тестированию. Не могу сообразить, как правильно должен выглядеть тесткейс. То есть проблема в чем - возможны два подхода, я просто не знаю, какой правильный, какой нет и почему. Понятно, что на практике можно использовать любой, но может быть, есть какие-то специальные соображения?
Итак, задача: надо проверить, что когда пользователь указал имя, то оно показано в виде ссылки на профиль. Если пользователь не указал имя (нет требования по имени), то вместо имени в ссылке показан текст "Профиль".
2 подхода:
1) Создать 2 разных тесткейса, с разными пользователями, в одном у пользователя есть имя, в другом нет. Ожидаемые результаты соответственно - имя пользователя, или слово "Профиль".
2) Создать 1 тесткейс: вначале у пользователя задается имя, сохраняется, затем проверка ссылки - должно быть имя. Потом у пользователя стирается имя, сохраняется, проверка - слово "Профиль".
Во втором случае меня смущает факт сохранения - это как бы размывает суть тесткейса и не совсем ясно, что именно тестируется - то ли изменение текста в ссылке, то ли функция сохранения.
В первом мне не нравится, что надо обязательно использовать два разных пользователя, и непонятно, как на 100% обеспечивать наличие имени у одного, и отсутствие у второго.
непонятно, как на 100% обеспечивать наличие имени у одного, и отсутствие у второго.
Обычно для этого делают тестовые аккаунты. Но это не гарантирует проверку динамики. может получиться так что у старых пользователей без имени все норм, а у тех кто удалил имя - нет.
Вообще подумайте, каким образом это условие может возникнуть, что имя у пользователя отсутсвует. (Я думаю - он его стер, он его не задал при создании аккаунта) Но может есть еще какие-то способы.
Тогда это будет просто одним из ожиданий тестов в разделе "изменение данных пользователя" и "создание пользовательского аккаунта"
Спасибо за ответ!
По умолчанию имя пользователя пустое, но его и потом можно стереть (оно необязательно, так как вход осуществляется по емейлу). Для тех случаев, когда имя отсутсвует, используются заглушки типа "Профиль" или "Пользователь". Это, может быть, не самое лучшее решение, но оно сейчас пока самое простое (не надо добавлять обязательности полю, не надо проверять имя на уникальность).
Меня больше заинтересовало, как правильнее сделать. Я программист, с тестами работаю постольку поскольку, но имею желание разобраться. Рассматривая тесты как программы (а так оно часто я бывает), я вижу, что подходов может быть множество. Но работают ли здесь правила рефакторинга (например, экстрагировать повторяющиеся действия в функцию и т.п.) или нет, неясно.
О данной задаче. Тестовый эккаунт - это само собой. Но ведь эти тестовые эккаунты могут использоваться разными тестами, они также могут пострадать в результате рефакторинга, в-общем, нет никакой 100% гарантии за исключением того случая, когда тестовый эккаунт создается с нуля.
И вот тут я никак не могу понять - с одной стороны вроде хорошо, получается end-to-end тест (с момента создания эккаунта до его использования), с другой стороны, это нарушает гранулярность тесткейса (а должна ли она быть? Существует ли описанная кем-то наилучшая практика по созданию тестов?)
"Правильно" сделать так, чтобы тест давал вам нужную и верную информацию. Если он это делает, это полезный тест. Все остальное второстепенно.
Насчет организации кода - тут не совсем так как в программировании, тут больше важна легкость понимания кода, чем его высокая производительность. Однако, как и в программировании стоит отделить логику от места ее использования (тест). Ортогональность тоже хорошо - т.е. когда можно писать тесты отдельно а модули отдельно.
Код теста может выглядеть по-детски но зато его поймет любой ребенок. Этим не стоит пренебрегать. Когда к проекту подключаются новые разработчики, то тесты могут стать для них спецификацией и документацией. Как говорил Роберт Мартин в одном из своих видео, тест - это первый клиент вашего интерфейса.
Вот еще мой ответ почитайте насчет независимости тестов, это в принципе и соображений о гранулярности касается.