BDD en C#: cómo escribir pruebas que el negocio entiende

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

BDD en C#: cuando las pruebas hablan el lenguaje del negocio

\n\n

Imagine: usted es un desarrollador de C#. Un product owner se acerca y le dice: «Haga que después de pagar un pedido, el usuario reciba un correo, pero solo si el monto es mayor a 1000 rublos». Usted asiente, se va a codificar, escribe la lógica, la cubre con pruebas unitarias. Una semana después, muestra el resultado. El PO lo mira, frunce el ceño y dice: «Me refería a otra cosa».

\n\n

¿Le suena familiar? Este es el problema clásico de la brecha entre el negocio y el desarrollo. Y es precisamente lo que resuelve el BDD en C# — Behaviour-Driven Development, o desarrollo guiado por el comportamiento.

\n\n

En este artículo, analizaremos qué es BDD, en qué se diferencia de TDD y, lo más importante, cómo implementar BDD en un proyecto de C# con SpecFlow y xUnit. Verá ejemplos reales de código, aprenderá a escribir escenarios en Gherkin y los convertirá en pruebas automatizadas. ¡Comencemos!

\n\n

¿Qué es BDD y para qué sirve?

\n\n

BDD (Behaviour-Driven Development) es una metodología de desarrollo en la que los requisitos del sistema se describen a través del comportamiento del usuario. En lugar de especificaciones técnicas áridas, usted escribe escenarios en lenguaje natural que entienden tanto el negocio como el desarrollador.

\n\n

La idea clave de BDD: «No verifique que el código funciona. Verifique que el sistema se comporta como el negocio espera».

\n\n

A diferencia de TDD (Test-Driven Development), donde primero escribe una prueba unitaria y luego el código, BDD se centra en los escenarios de uso. Las pruebas BDD no verifican un método o una clase, sino un escenario de usuario completo.

\n\n

Los tres pilares de BDD

\n
    \n
  • Lenguaje unificado — todos los participantes del proyecto (PO, analista, tester, desarrollador) hablan el mismo idioma. Generalmente, es Gherkin.
  • \n
  • Escenarios — cada elemento funcional se describe mediante Given-When-Then (Dado-Cuando-Entonces).
  • \n
  • Automatización — los escenarios se convierten en pruebas automatizadas que se ejecutan como parte del CI/CD.
  • \n
\n\n

Ahora veamos cómo se ve esto en código C#.

\n\n

Herramientas para BDD en C#

\n\n

Para implementar BDD en el ecosistema .NET, existen dos herramientas principales:

\n\n
    \n
  • SpecFlow — el framework BDD más popular para C#. Analiza los escenarios Gherkin y los vincula con el código.
  • \n
  • xUnit / NUnit / MSTest — ejecutores de pruebas que ejecutan las pruebas BDD.
  • \n
\n\n

Usaremos SpecFlow + xUnit. La instalación es sencilla, a través de NuGet:

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

Después de la instalación, cree una carpeta Features en el proyecto; allí residirán sus archivos .feature con los escenarios.

\n\n

Escribiendo nuestro primer escenario BDD en Gherkin

\n\n

Gherkin es un lenguaje de descripción de comportamiento. Utiliza palabras clave: Feature, Scenario, Given, When, Then, And, But.

\n\n

Describamos un escenario simple: un usuario intenta pagar un pedido y, si el monto es mayor a 1000 rublos, recibe un correo.

\n\n

Cree un archivo Payment.feature en la carpeta Features:

\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

Tenga en cuenta: aquí

Blogs

Book Recommendations