【问题标题】:BDD: How to write step definitions for integration tests when the SUT has not been developed yetBDD:如何在 SUT 尚未开发时为集成测试编写步骤定义
【发布时间】:2015-10-11 09:28:02
【问题描述】:

理想情况下,使用 BDD 的由外而内的开发风格,您必须首先编写带有相关步骤定义的场景。然后就失败了。然后编写足够的应用程序代码使其通过。

我的问题是,在一个真实的场景中,当没有开发任何 UI 可以被 selenium 用来在或任何可以使用的应用程序类上实现页面对象时,如何编写集成测试的步骤定义在步骤定义中执行业务逻辑层或模型测试。

我在这里遗漏了什么吗?我是 BDD 的新手,这真的很令人困惑。请分享你的实践经验,不要理论。

编辑:
示例场景: 客户想要一个电子商务网络应用程序。最初要求通常的功能,例如:
产品列表库
购物车
使用各种付款方式结帐
电子邮件通知

根据我对由外向内开发过程的理解(这可能是错误的):

1) 在分析上述用户故事后,我将使用 Gherkin 编写场景规范
2) 然后为这些场景编写步骤定义(我如何编写它们,因为没有任何 UI 或应用程序类可供使用)
3) 我运行这些失败的场景
4) 然后开发人员编写一些应用程序代码,使我的场景通过
5) 然后重构我的步骤定义。

【问题讨论】:

  • 请在您的问题中添加一个示例场景,我会告诉您(我认为)您做错了什么。

标签: user-interface selenium integration-testing bdd


【解决方案1】:

您所谓的场景描述只是关于应用程序必须包含哪些功能的草稿。它应该是这样的,而不是使用gherkin syntax:

Feature: Product Listing Gallery
  To be able to order 
  The Customers should be able to
  Browse a product list

  Scenario: Listing products without filters
    Given Susan is a Customer
    When Susan asks for a product list
      And does not give any filters
    Then she should get a list of products 
      But only products the store has in stock will be listed

  ...

因此,您的功能文件中可以有许多场景,每个场景都描述一个用例。将用例写入这些文件后,您可以添加步骤定义。

这部分的故事类似于多态性。通过多态,你定义了一个接口,它描述了抽象(做什么),你有类,它以某种方式实现接口(如何做)。如果您还没有感觉到类比:功能描述是关于做什么,而步骤定义是关于如何去做。我认为很明显,您可以使用具有相同特征描述的许多不同类型的步骤定义,就像许多类可以通过多态实现相同的接口一样。因此,如果您想测试整个应用程序,您可以编写 e2e 测试步骤定义。如果您想单独测试 GUI,您可以编写 GUI 测试步骤定义并模拟业务逻辑。如果您想单独测试业务逻辑,您可以编写域模型测试步骤定义并模拟 GUI 和持久性,等等...

您可以将所有这些不同的步骤定义与相同的功能文件一起使用。因此,如果实现细节发生变化,例如如果您更改 GUI 布局,那么您唯一需要修改的是使用 GUI 的步骤定义,而不是仅包含抽象的功能文件。

要回答这个问题,您不需要从外向内发展。如果您将 BDD 与 DDD 一起使用,那么您可以先开发领域模型,然后使用具有不同步骤定义的相同功能文件来开发 GUI。如果你想从 GUI 开始,那么你应该先模拟出业务逻辑并单独测试 GUI。之后,您可以编写用于单独测试业务逻辑的步骤定义。这种方式比使用 e2e 测试来开发整个应用程序更好,因为 e2e 测试很慢。我不支持后一种方式,因为我认为考虑领域模型而不考虑 GUI、数据库结构和其他东西的影响会更好。办公室。这些只是我对我们应该如何使用 BDD 进行开发的印象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多