我是否遵循 BDD 规范?

Do I follow BDD specification?

我正在尝试编写我的第一次基于 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.")

    }


  }

}  

我试图从技术用户的角度来写。
这是正确的吗?

When 子句应该理想地描述动作而不是状态,所以写作

When("consumer client gets started")

而不是 When("Kafka server is not active") 更惯用。将 Given-When-Then 视为 Hoare triple 可能会有所帮助,我们首先在操作之前指定状态 (Given),然后是改变状态的操作 (When),以及最后是操作后的预期状态 (Then)。

featurescenario 子句在理想情况下应该是有意义的,即使在省略 Given-When-Then 主体时也是如此。只是说 feature("Kafka") 似乎太宽泛了。指定的特性实际上是 Kafka 和复制服务器之间的关系,而不仅仅是 Kafka 本身。

假设指定的特性是复制服务器在两种情况下分发给Kafka,当Kafka up和当它down时,那么我们可以将规范细化如下:

  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'")
    }
  }