Как правило, плохая идея иметь сценарии, основанные на других сценариях для настройки их контекста.Это шаблон, который мы называем «GivenScenario».Это усложняет просмотр поведения (теперь вам нужно прочитать весь первый сценарий, чтобы понять контекст второго), и если первый сценарий не удался, второй даже не запустится.
Также возможно, что кто-то, кто не знает, что второй сценарий полагается на первый, может изменить первый или добавить один между ними.
Если у вас есть какое-то поведение, которое «всегда включено», большинство BDDинструменты помещают это в то, что они называют «Фон».Эквивалент этого в ScalaTest выглядит как черта «BeforeAndAfter» (я не так хорошо знаком с ScalaTest, так что кто-то исправит меня, если я ошибаюсь!).
Поэтому вместо того, чтобы это «всегда включено» активноВ сценарии websocket вы можете переместить поведение на «До».
Конечно, «фон» в ScalaTest не печатается при его запуске;это тихоНо вы могли бы обойти это, позвонив в любом случае, и переместив английский язык к названию (обратите внимание на добавление «active»):
class ExampleSpec extends FeatureSpect with BeforeAndAfter {
before {
server = startServer()
}
scenario("Websocket client sends data to active websocket server on SAP when is UP") {
Given("it supports websocket channel")
// etc...
}
}
или первое значение:
class ExampleSpec extends FeatureSpect with BeforeAndAfter {
before {
server = startServer()
}
scenario("Websocket client sends data to websocket server on SAP when is UP") {
Given("an active server with a client that supports websocket channel")
// etc...
}
}
(Опять же, я не знаком со ScalaTest, и это было всегда с тех пор, как я запрограммировал Scala, поэтому, пожалуйста, исправьте любые синтаксические ошибки; этот ответ более сфокусирован на принципе. В документации, которую я нашел на этом , все шаги показаны какв нижнем регистре.)
Единственный раз, когда я склонен использовать GivenScenarios, это когда я ленивый (или прагматичный), и есть (обычно человеческое) взаимодействие, которое приведет к одной или нескольким попыткам чего-то перед тем, как получитьуспех:
Given Florence Forgetful is at the login page
When she puts in the wrong username
Then she should be told there was an error
When she puts in the wrong password
Then she should be told there was still an error
When she puts in the right username and right password
Then she should be taken to her home page.
Однако, если он не читается таким образом или в самый первый раз , взаимодействие на этих первых шагах становится чем-то иным, чем тривиальным (например, у вас также естьзаполнить поле для ввода капчи), или в самый первый раз Я получаю сообщение об ошибке в одном из этих шагов, я реорганизую их в отдельные сценарии.
Если включитьподдержка включения и выключения в клиенте - это действие, которое может выполнять человек, тогда вы можете следовать той же схеме, но необходимость в двух «когда» подряд является хорошим признаком того, что теперь проиллюстрировано более одной возможностиздесь:
scenario("Websocket client sends data to websocket server on SAP when is UP") {
Given("Websocket server on SAP is ACTIVE")
And("websocket support is turned off")
When("Websocket client get started")
Then("throws RunException")
When("websocket support is turned on")
And("Websocket client get started") // <-- This is a second "When" here
Then("print message `Connection has been successfully established`")
succeed
}
Так что, вероятно, не правильный путь для этого.В случае сомнений полностью избегайте шаблона GivenScenario.