Google app engine 这个BDD规范有什么问题吗?

Google app engine 这个BDD规范有什么问题吗?,google-app-engine,bdd,Google App Engine,Bdd,我是行为驱动设计(BDD)的新手,所以我想知道我是否正确应用了它 我将要开发的功能从数据存储库导出Twitter句柄(“作者”)列表,并将其作为CSV电子邮件附件发送给请求者。数据存储库是Google App Engine的数据存储 回顾Dan North对行为驱动测试的主要描述:,下面是我如何指定我的测试: 标题:分析师导出作者 作为分析员 我想导出作者 所以我可以分析他们在另一个系统中谈论的内容 场景1:段包含作者,可以发送导出 给定段包含作者 用户已在其用户配置文件中提供其电子邮件地址 当

我是行为驱动设计(BDD)的新手,所以我想知道我是否正确应用了它

我将要开发的功能从数据存储库导出Twitter句柄(“作者”)列表,并将其作为CSV电子邮件附件发送给请求者。数据存储库是Google App Engine的数据存储

回顾Dan North对行为驱动测试的主要描述:,下面是我如何指定我的测试:

标题:分析师导出作者

作为分析员

我想导出作者

所以我可以分析他们在另一个系统中谈论的内容

场景1:段包含作者,可以发送导出

给定段包含作者

用户已在其用户配置文件中提供其电子邮件地址

当用户单击该段的导出时

然后确保用户将作者作为CSV附件发送到电子邮件

场景2:段包含作者,但无法发送导出

给定段包含作者

并且用户未在其用户配置文件中提供其电子邮件地址

当用户单击该段的导出时

然后提醒用户首先在其用户配置文件中设置其电子邮件地址

场景3:片段不包含作者

给定段不包含作者

当用户单击该段的导出时

然后防止用户单击“导出”按钮

并显示一条消息,说明该段没有要导出的作者

有几个问题:

我应该考虑什么样的情节,或者我把这个故事的范围过窄?

  • 场景3应该是另一个故事的一部分吗?丹·诺斯说,这些场景应该是同一个事件。但是,用户体验可能会导致用户无法单击导出按钮,因为该按钮已禁用。我是否应该以不同的方式编写事件,使其适合所有场景,例如,“当用户要导出段时”

  • 还有什么能让这成为更好的BDD测试吗

  • 关于如何实现这样的测试,有什么建议取决于其他系统,比如谷歌应用程序引擎数据存储和电子邮件系统吗?我应该存根数据存储吗?如何测试是否收到电子邮件附件


  • 每个故事一个事件?

    我们可能会说这些天的场景应该是相同的能力;在这种情况下,可以通过电子邮件导出作者。它们中的大多数都会有一个执行导出的事件,但与该功能相关的任何其他内容都属于它

    我通常会使默认案例成功,即:

    当用户导出段时

    并在失败时使用尝试:

    当用户尝试导出段时

    但是,如果“导出”按钮被禁用,则可能会发生其他情况。用户看到没有作者的消息的触发因素是什么?可能是这样的:

    假设某一段没有作者
    当用户查看该段时
    然后,他们应该被告知该部分没有作者

    您如何改进方案?

    避免将UI域与Twitter应用程序域混用。讨论“当用户导出该段时”,而不是单击按钮。也许有一天它会在触摸屏上拖放,而不是点击按钮。如果你认为这种方法更好,今天就是时候了,你可以改变它,你的场景仍然有效。除了点击按钮,你的场景真的很好;当然比一般人好

    在BDD中,我们尽量避免使用“测试”一词,除非我们真正谈论的是测试,而这些只是场景或示例,它们碰巧提供了测试作为一个很好的副产品。把它们称为例子或场景,你会发现与商业人士谈论它更容易,而且你自己也会想到更多的例子。我还写了一些文章来发现遗漏的场景,这可能会对你有所帮助。测试人员非常擅长发现这些问题,所以如果可以的话,在对话中加入一个。如果你不能,试着找另一位分析师或业务专家来戴上这顶帽子

    一个故事中有多少场景?

    故事只是一个快速反馈功能的片段,其中的场景数量在很大程度上是任意的,并且取决于团队编写这些代码的容易程度。在冲刺结束时,集中精力从干系人那里获得反馈,并使故事足够小,以便您可以在内部快速获得反馈,并且足够大,以便您可以向干系人展示一些有趣的东西。我认识编写整个功能的团队(并乐于展示部分功能),将每个场景作为一个单独的故事的团队,以及在两者之间做一些事情的团队(例如,所有成功的导出,然后是所有边缘案例)。所有这些方法都是有效的

    如何包括相关系统?

    您可以模拟这些(通过编写您自己的存根系统,或者使用模拟框架,或者使用SOAP、SOAPUI等来模拟那些不幸的灵魂),也可以使用真实的系统。在您的情况下,我会尝试部署到真实系统的测试版本,并设置一个测试电子邮件域,我可以将电子邮件发送到该域(或将其存根,如上所述)。有很多方法可以通过API访问电子邮件收件箱,也可以自动将它们导出到文件或数据库等

    做任何能让您快速获得代码反馈的事情,记住任何您没有自动测试的系统都必须手动验证,电子邮件网关之类的东西不太可能改变(因此也不太可能有bug),BDD不是一个好的工具
    Given there are some authors
    When I ask for an export of authors
    Then I should get a list of authors
    
    Given I am an analyst
    And their are some authors
    When ...