我在 bdd / gherkin 做错了什么?

问题描述 投票:0回答:1

我正在学习 BDD,行为驱动开发,虽然我抓住了系统行为示例的“想法”,我们可以执行这些示例并通过它来开发它,但我陷入了如何编写系统行为示例的“想法”中。正确的场景(使用小黄瓜)旨在简化自然语言到步骤之间的过渡......

让我们看看吧。我目前在注册服务部门工作。

我目前的问题就在这块:

  Scenario: Successful registration
      Given that a user wants to register
      And is not registered
      When he enters his credentials
      And they are correct
      Then the system should register him

分为以下步骤...

   @Dado("that a user wants to register")
    public void que_un_usuario_desea_registrarse() {
        name = "Marcos";
        surname = "Perez";
        email = "[email protected]";
        cardId = "23432423";
        marcos = new User(name,surname,email,cardId);
    }

    @Dado("is not registered")
    public void no_esta_registrado() {
        fakeDB.removeIfExists(marcos);
    }

    @Cuando("he enters his credentials")
    public void introduzca_sus_credenciales() {
// This is an empty space because i have no idea of what should be in
    }

    @Cuando("they are correct")
    public void estas_sean_correctas() {
        logUpService.logUp(name, surname, email, cardId, fakeDB);
    }

    @Entonces("the system should register him")
    public void el_sistema_deberia_registrarlo() {
        assertEquals(marcos.hashCode(), fakeDB.persisted.hashCode());
    }

我尝试过改变需求的表达方式,但我仍然坚持

  1. 像“用户想要注册”这样的无软件的事情应该如何一步步实现?

  2. 虽然我使用一种测试替身(称为“fakeDB”),它返回与日志服务(称为“logUpService”)发送到其“存储”组件相同的用户实例,但我不太确定如果这是断言“Then”子句的最佳方式。

我对了解这一点非常感兴趣,所以我很乐意阅读您的建议。

testing tdd bdd behavior agile
1个回答
0
投票

我发现思考正在运用的能力很有用。在这种情况下用户能够做什么?

用户能够注册

运用这种能力(或者尝试,在不愉快的道路上)为我们提供了“何时”。通常一个场景中只有一个When。所以现在我们可以这样写:

When Marco registers with details <details go here>

理想的结果应该是有价值的。他们为什么要注册?他们注册后会发生什么?

Then Marco should see the home page
And Marco should be logged in to his account.

(最后一步将检查显示某人已登录的相关图标等。)

现在我们可以回到上下文:要发生这种情况需要满足什么条件?可能是这样的:

Given Marco is not already registered
And Marco has a valid email address at [email protected]

您会注意到,我没有包含有关用户想要什么的任何内容。从系统的角度来看,这并不重要。也许有人强迫 Marco 登录,而他实际上根本不想登录!它不会改变系统行为。

如果您觉得有用,您当然可以包含该步骤,但如果您这样做,我会将其留空并且不会在其中放置任何自动化。

总共的场景如下:

Given Marco is not already registered
And Marco has a valid email address at [email protected]
When Marco registers with 
    email: [email protected], 
    name: Marco Perez, 
    card id: 23432423
Then Marco should see the home page
And Marco should be logged in to his account.

如果您的 BDD 工具不允许多行步骤,您可以将 Marco 的信息放入后台表或 Gives 中,然后将 When 缩短为“Marco 注册他的详细信息”。在这种情况下应该仍然只有一个 When 。

© www.soinside.com 2019 - 2024. All rights reserved.