Pruebas en C# (.NET): revisión de frameworks y herramientas clave
Las pruebas de calidad son una parte esencial del desarrollo de software confiable en la plataforma .NET. En el ecosistema de C# existen numerosos frameworks y utilidades maduros que ayudan a automatizar la verificación del código en todos los niveles: desde pruebas unitarias hasta pruebas de integración y UI. En este artículo revisaremos las herramientas principales, sus características y proporcionaremos ejemplos prácticos de uso.
Frameworks principales para pruebas unitarias
La elección de un framework para pruebas unitarias en .NET a menudo se reduce a tres candidatos principales: xUnit, NUnit y MSTest. Todos ellos admiten atributos para definir pruebas, aserciones y ejecución desde la línea de comandos o el IDE.
xUnit.net
Un framework moderno y en activo desarrollo, creado por el autor de NUnit. Se caracteriza por un diseño minimalista, renunciando al atributo [TestFixture] en favor de constructores para la inicialización. Se integra perfectamente con .NET Core y .NET 5+.
using Xunit;
public class CalculatorTests{ [Fact] public void Add_ShouldReturnSum_WhenTwoNumbersAreProvided() { // Arrange var calculator = new Calculator(); int a = 5, b = 3;
// Act int result = calculator.Add(a, b);
// Assert Assert.Equal(8, result); }
[Theory] [InlineData(2, 3, 5)] [InlineData(0, 0, 0)] [InlineData(-1, 1, 0)] public void Add_ShouldHandleVariousCases(int a, int b, int expected) { var calculator = new Calculator(); int result = calculator.Add(a, b); Assert.Equal(expected, result); }}Características clave: [Fact] para pruebas normales, [Theory] con [InlineData] para pruebas parametrizadas, soporte integrado para pruebas asíncronas.
NUnit
Uno de los frameworks más antiguos, ampliamente utilizado en proyectos empresariales. Proporciona un rico conjunto de atributos ([SetUp], [TearDown], [TestCase]) y mecanismos flexibles para gestionar el contexto de las pruebas.
using NUnit.Framework;
[TestFixture]public class CalculatorTests{ private Calculator _calculator;
[SetUp] public void Setup() { _calculator = new Calculator(); }
[Test] [TestCase(1, 2, 3)] [TestCase(10, -5, 5)] public void Add_ShouldReturnCorrectSum(int a, int b, int expected) { int result = _calculator.Add(a, b); Assert.That(result, Is.EqualTo(expected)); }}Diferencias: requiere el atributo [TestFixture] para la clase, usa Assert.That(...) con el modelo de restricciones, lo que hace que las aserciones sean más legibles.
MSTest
Framework de Microsoft, integrado en Visual Studio. Fácil de aprender, pero menos flexible que xUnit o NUnit. Se utiliza a menudo en proyectos donde la estandarización a nivel de empresa es importante.
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]public class CalculatorTests{ [TestMethod] public void Add_ShouldReturnSum() { var calculator = new Calculator(); int result = calculator.Add(2, 3); Assert.AreEqual(5, result); }}Bibliotecas para objetos mock y stubs
Para aislar el código bajo prueba de dependencias externas (BD, API, sistema de archivos) se utilizan frameworks de mock. En .NET los más populares son Moq, NSubstitute y FakeItEasy.
Moq
Líder en popularidad. Permite crear fácilmente objetos mock dinámicos mediante expresiones lambda.
using Moq;using Xunit;
public class OrderServiceTests{ [Fact] public void PlaceOrder_ShouldCallRepository_WhenVali También en la biblioteca
node-cache: Caché simple y eficiente en Node.js
Caché en Java: Redis, Caffeine y otras herramientas
Elasticsearch .NET para C#: guía completa con ejemplos prácticos
Colas de tareas en Kotlin: Coroutines, KJob y patrones avanzados