BDD在C#中:如何编写业务人员能理解的测试

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# 中的 BDD:当测试用业务语言说话

\n\n

想象一下:你是一名 C# 开发者。产品负责人找到你说:“请实现一个功能:订单支付后,用户应收到一封邮件,但仅当金额超过 1000 卢布时。”你点头,开始写代码,实现逻辑并用单元测试覆盖。一周后,你展示成果。产品负责人看着代码,皱起眉头说:“我指的不是这个意思。”

\n\n

熟悉吗?这是典型的业务与开发之间的脱节问题。而 C# 中的 BDD——Behaviour-Driven Development(行为驱动开发)——正是为了解决这个问题而生。

\n\n

在本文中,我们将探讨什么是 BDD,它与 TDD 有何不同,以及最重要的是,如何通过 SpecFlow 和 xUnit 在 C# 项目中引入 BDD。你将看到真实的代码示例,学会用 Gherkin 编写场景,并将其转化为自动化测试。我们开始吧!

\n\n

什么是 BDD,为什么需要它?

\n\n

BDD(行为驱动开发)是一种开发方法论,它通过用户行为来描述系统需求。你不再编写枯燥的技术规格说明,而是用自然语言编写业务人员和开发人员都能理解的场景。

\n\n

BDD 的核心思想是:“不要只检查代码是否运行。要检查系统的行为是否符合业务预期。”

\n\n

与 TDD(测试驱动开发)不同,TDD 要求先编写单元测试再写代码,而 BDD 则聚焦于使用场景。BDD 测试不是测试某个方法或类,而是测试一个完整的用户场景。

\n\n

BDD 的三大支柱

\n
    \n
  • 统一语言——项目中的所有参与者(产品负责人、分析师、测试人员、开发人员)使用同一种语言。通常是 Gherkin。
  • \n
  • 场景——每个功能需求都通过 Given-When-Then(给定-当-那么)来描述。
  • \n
  • 自动化——场景被转化为自动化测试,作为 CI/CD 的一部分运行。
  • \n
\n\n

现在,让我们看看它在 C# 代码中是如何实现的。

\n\n

C# 中 BDD 的工具

\n\n

在 .NET 生态系统中实现 BDD 有两个主要工具:

\n\n
    \n
  • SpecFlow——C# 中最流行的 BDD 框架。它解析 Gherkin 场景并将其与代码绑定。
  • \n
  • xUnit / NUnit / MSTest——执行 BDD 测试的测试运行器。
  • \n
\n\n

我们将使用 SpecFlow + xUnit。安装很简单——通过 NuGet:

\n\n
dotnet add package SpecFlow\ndotnet add package SpecFlow.xUnit\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio
\n\n

安装后,在项目中创建一个 Features 文件夹——你的 .feature 场景文件将存放在这里。

\n\n

编写第一个 Gherkin BDD 场景

\n\n

Gherkin 是一种行为描述语言。它使用以下关键字:Feature、Scenario、Given、When、Then、And、But。

\n\n

让我们描述一个简单的场景:用户尝试支付订单,如果金额超过 1000 卢布,用户将收到一封邮件。

\n\n

在 Features 文件夹中创建文件 Payment.feature:

\n\n
Feature: Payment Notification\n    As a customer\n    I want to receive an email after payment\n    So that I have a confirmation of my purchase\n\nScenario: Successful payment over 1000 rubles sends notification\n    Given a customer with balance 5000 rubles\n    When the customer pays an order of 1500 rubles\n    Then the customer should receive an email notification\n\nScenario: Payment under 1000 rubles does not send notification\n    Given a customer with balance 5000 rubles\n    When the customer pays an order of 500 rubles\n    Then the customer should not receive any email notification
\n\n

请注意:这里

博客

书籍推荐