Должен ли я следовать спецификации BDD? - PullRequest
3 голосов
/ 20 апреля 2019

Я пытаюсь в первый раз написать свой жизненный тест на основе стиля BDD следующим образом:

final class SapRsSpec extends FeatureSpec
  with Matchers
  with GivenWhenThen {

  feature("KAFKA") {
    scenario("Technical user starts SAP RS") {
      Given("Consumer client gets started")
      When("KAFKA server is not active")
      Then("message `Can not connect ot KAFKA` appears.")

    }


  }

}  

Я пытался написать с технической точки зрения пользователя.
Это правильно?

1 Ответ

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

When в идеале должно описывать действие, а не состояние, поэтому написание

When("consumer client gets started")

вместо When("Kafka server is not active") более идиоматично. Может быть полезно думать о Given-When-Then как о тройке Хоара , где мы сначала указываем состояние перед действием (Given), затем действие, которое изменяет состояние (When), и, наконец, ожидаемое после действия (Then).

Положения

feature и scenario в идеале должны иметь смысл сами по себе, даже если не указывать тело Given-When-Then. Просто заявить feature("Kafka") кажется слишком широким. Указанная функция на самом деле является связью между Kafka и сервером репликации, а не только самой Kafka.

Скажем, указанная функция - это распространение сервера репликации на Kafka по двум сценариям: когда Kafka работает, а когда нет, мы можем уточнить спецификации следующим образом:

  feature("Replication server's distribution to Kafka") {
    scenario("Replication server's distribution when Kafka is DOWN") {
      Given("Kafka server is NOT active")
      When("consumer client gets started") 
      Then("print message 'Failed to connect to Kafka'")
    }

    scenario("Replication server's distribution when Kafka is UP") {
      Given("Kafka server is active")
      When("consumer client gets started") 
      Then("print message 'Successfully connected to Kafka'")
    }
  }
...