Изолирующее поведение в BDD - PullRequest
1 голос
/ 15 марта 2020

Предположим, у меня есть программа, которая выполняет три вещи подряд:

  1. Task 1
  2. Task 2
  3. Task 3

Теперь предположим, что я хочу написать BDDs для Задачи 2. Скажем, когда это не удалось. Теперь Task 2 выполняется только после успеха Task 1. Но сама задача 1 может быть успешной во многих отношениях (например, моя программа повторяет попытку Task 1, если нижестоящая система отвечает с ошибкой в ​​течение фиксированного числа раз). Мой вопрос заключается в том, какое поведение Task 1 следует учитывать при написании тестов для Task 2?

Given_Task2Fails_Task1IsRetried_Expect_SomeBehaviour

Given_Task2Fails_Task1IsNotRetried_Expect_SomeBehaviour

Если это так, то мне нужно создать все перестановки и комбинации для каждого из задачи, сохраняющие задание 2 как постоянное. Это взрывает количество сценариев ios с большим количеством дублирующегося кода. Вот что я имею в виду:

Given_Task2Fails_Task1IsRetried_Task3IsNotRetried_Expect_SomeBehaviour

Given_Task2Fails_Task1IsNotRetried_Task3IsNotRetried_Expect_SomeBehaviour

Given_Task2Fails_Task1IsRetried_Task3IsRetried_Expect_SomeBehaviour

Given_Task2Fails_Task1IsNotRetried_Task3IsRetried_Expect_SomeBehaviour

Как мне написать solid scenar ios в таких случаях? В идеале я хотел бы изменить каждый параметр моей системы, сохраняя постоянным значение Task 2. Но это похоже на метод грубой силы, и я уверен, что есть лучшие подходы.

1 Ответ

2 голосов
/ 03 апреля 2020

Вы должны предполагать, что Задача 1 была успешной при написании тестов для Задачи 2. Различные способы, с помощью которых Задача 1 может завершиться с ошибкой - и не восстановиться, - это не то, что вам нужно зафиксировать в тестах, проверяющих поведение Задачи 2.

Given Task 1 succeeded
When Task 2 is performed
Then Outcome 2 should have happened

То, что происходит при сбое Задачи 1, даже не относится к тестам, утверждающим, что Задача 1 выполнена успешно. Фактически, различные способы выполнения задачи 1 могут быть (и, возможно, должны быть) записаны как их собственный сценарий ios, модульные тесты или интеграционные тесты.

...