BDD en C#: cuando las pruebas hablan el lenguaje del negocio
\n\nImagine: 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\nEn 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\nBDD (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\nLa idea clave de BDD: «No verifique que el código funciona. Verifique que el sistema se comporta como el negocio espera».
\n\nA 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\nLos 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
Ahora veamos cómo se ve esto en código C#.
\n\nHerramientas para BDD en C#
\n\nPara 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
Usaremos SpecFlow + xUnit. La instalación es sencilla, a través de NuGet:
\n\ndotnet add package SpecFlow\ndotnet add package SpecFlow.xUnit\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\nDespués de la instalación, cree una carpeta Features en el proyecto; allí residirán sus archivos .feature con los escenarios.
Escribiendo nuestro primer escenario BDD en Gherkin
\n\nGherkin es un lenguaje de descripción de comportamiento. Utiliza palabras clave: Feature, Scenario, Given, When, Then, And, But.
Describamos un escenario simple: un usuario intenta pagar un pedido y, si el monto es mayor a 1000 rublos, recibe un correo.
\n\nCree un archivo Payment.feature en la carpeta Features:
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\nTenga en cuenta: aquí