Сформулируйте правильную сценарную фразу - PullRequest
1 голос
/ 23 апреля 2019

Хотелось бы узнать, соответствует ли следующая фраза корнишона правилам BDD:

final class KafkaSpec extends BddSpec {

  feature("Kafka distribution to SAP server via websocket") {

    scenario("Kafka consumer does not receive messages from Kafka server") {
      Given("Kafka server is NOT active")
      When("consumer client get started")
      val ex = SenderActor.run
      Then("print message `Failed to connect to Kafka`")
      ex.failed map { ex =>
        assertThrows[ConnectException](ex)
      }
    }

    scenario("Kafka consumer receives messages from Kafka server") {
      Given("Kafka server is ACTIVE")
      When("consumer client get started")
      Then("print message `Successfully connected to Kafka`")
      succeed
    }

  }
}  

Использую ли я правильное время?Правильно ли я использую Given-When-Then?

1 Ответ

2 голосов
/ 23 апреля 2019

с Гивенсом (контекстами) все в порядке; мы обычно используем либо непрерывное настоящее или прошедшее время для тех:

Given the kafka server is active <-- continuous present
Given the kafka server was started <-- past tense

Для случаев (событий) лучше использовать активный голос. Активный голос начинается с того, кто это сделал. Кто запустил сервер? (Здесь я тоже немного поправил английский.)

When the consumer client was started <-- passive voice
When our consumer starts their client <-- active voice

Для Thens (результатов) мне действительно нравится слово «следует». Это побуждает людей подвергать сомнению это; это действительно должно произойти? Сейчас? В этом выпуске? Есть ли контекст, для которого это не должно происходить или должно происходить что-то другое? Это все еще должно произойти, или этот сценарий изменился?

Then the consumer interface should print the message, `Successfully connected to Kafka`.

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

Then the interface should tell the consumer that the connection was successful.

Это то, что мы обычно называем "декларативным, а не императивным" . Также нормально иметь пассивный голос здесь:

Then the consumer should be told that the connection was successful.

Использование слова «должен» также помогает дифференцировать результаты одного сценария от других; часто они совпадают с результатом, формирующим контекст для другого сценария:

Given Priscilla has an account
When she enters her username and password correctly
Then she should be on her home page.

Given Priscilla is on her home page...

Я написал больше о временах и языке BDD здесь , где вы также найдете тонны других ресурсов для новых BDD в категории категории BDD .

...