代码之家  ›  专栏  ›  技术社区  ›  Rimian

使用现有软件组件的行为驱动开发

  •  3
  • Rimian  · 技术社区  · 16 年前

    我正在阅读Rspec的beta版本: http://www.pragprog.com/titles/achbd/the-rspec-book

    它将行为驱动的开发周期(红色、绿色、重构)描述为在开发过程中采取的小步骤。这意味着一次添加一个功能。

    如果我要描述我的软件的一个特性(例如:cucumber测试中的一个成功的用户登录场景),如果我使用的是一个模块化组件(例如devide),它有很多特性(场景)。我怎么可能遵循行为驱动的技巧呢?一旦我的第一步通过,我必须反向工程我的其他测试,以反映我正在使用的软件组件的功能,从而违反BDD的原则!

    编辑(为了清楚起见):

    我的第一个场景是在实现designe之后通过的。但现在我必须考虑到我随后所有的端到端测试(我还没有写)围绕设计的行为,而不是我的股东的要求。因此,无法再应用BDD循环。我必须在我的测试中进行逆向工程设计,以使它们通过或不编写测试。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Lunivore    15 年前

    BDD循环包括创建场景,然后围绕这些场景进行对话,以发现任何遗漏、任何误解等。

    如果您使用像Cucumber这样的BDD工具,那么您就可以捕获所讨论的场景。

    理想情况下,场景将是高级步骤,重点是系统的功能和它们为用户提供的价值。它们不会涉及登录或身份验证失败。

    BDD并不是真正的测试。这是关于学习,让事情容易改变。如果您永远不会更改登录机制,那么手动验证身份验证就足够了。把注意力放在那些使你的应用程序与其他应用程序不同的事情上。你的软件到底是如何提供价值的?它如何与其他系统、应用程序和用户进行通信?如何赚钱,如何拯救生命,如何获得乐趣?

    Given I have registered an account
    When I <do this differentiating thing>
    Then I <achieve this differentiating outcome>
    

    登录将是隐式的,并作为第一个给定步骤的一部分作为较低级别的步骤调用。

        2
  •  1
  •   Steve Ross    16 年前

    所以我可以更好地理解:您有一个现有的系统,它包括测试,但不包括登录功能。您决定添加登录名:

    Given a visitor is not logged in
    When a visitor goes to the admin page
    Then the visitor should see the login page
    

    好的,然后您决定如何实现登录,因为这个场景失败了。正确的?因此,您选择了devieve,场景通过了,但是所有依赖于无安全系统的测试或规范现在都失败了。我还在轨道上吗?如果是这样的话,您会遇到这样一个情况:您正在添加一个在您的应用程序中非常普遍的功能,以至于您需要接触许多测试/规范才能使它们全部运行。您仍在首先测试,因为代码已损坏或测试无法识别新功能。不管怎样,你都知道工作要做在哪里。

    有帮助吗?