CSharp: Testing
Descubre los fundamentos del testing en C#, aprende a crear pruebas unitarias con MSTest y buenas prácticas para garantizar código fiable.
Aprende CSharp GRATIS y certifícateTesting en C#
El testing o pruebas de software constituye una disciplina fundamental en el desarrollo profesional que garantiza la calidad y confiabilidad del código. En C#, las pruebas automatizadas permiten verificar que nuestro código funciona correctamente y detectar errores antes de que lleguen a producción.
Fundamentos del testing
Las pruebas unitarias representan el nivel más básico de testing, donde se verifica el comportamiento de unidades individuales de código, típicamente métodos o clases. Estas pruebas deben ser independientes, rápidas de ejecutar y fáciles de entender.
El framework de testing más utilizado en el ecosistema .NET es MSTest, que viene integrado con Visual Studio, aunque también existen alternativas como NUnit y xUnit. Estos frameworks proporcionan las herramientas necesarias para escribir, organizar y ejecutar pruebas de manera eficiente.
Estructura básica de una prueba
Una prueba unitaria típica sigue el patrón AAA (Arrange, Act, Assert):
- Arrange: Preparar los datos y objetos necesarios
- Act: Ejecutar el método que queremos probar
- Assert: Verificar que el resultado es el esperado
[TestMethod]
public void Sumar_DosNumeros_RetornaResultadoCorrecto()
{
// Arrange
var calculadora = new Calculadora();
int a = 5;
int b = 3;
// Act
int resultado = calculadora.Sumar(a, b);
// Assert
Assert.AreEqual(8, resultado);
}
Atributos de testing
Los atributos son elementos clave que identifican y configuran nuestras pruebas:
- [TestClass]: Marca una clase como contenedora de pruebas
- [TestMethod]: Identifica un método como prueba unitaria
- [TestInitialize]: Ejecuta código antes de cada prueba
- [TestCleanup]: Ejecuta código después de cada prueba
[TestClass]
public class CalculadoraTests
{
private Calculadora _calculadora;
[TestInitialize]
public void Setup()
{
_calculadora = new Calculadora();
}
[TestMethod]
public void Multiplicar_NumeroPositivo_RetornaResultadoPositivo()
{
int resultado = _calculadora.Multiplicar(4, 3);
Assert.AreEqual(12, resultado);
}
}
Métodos de aserción
Las aserciones son el corazón de las pruebas, ya que verifican si el comportamiento observado coincide con el esperado. MSTest proporciona diversos métodos de aserción:
- Assert.AreEqual(): Verifica igualdad entre valores
- Assert.IsTrue() / Assert.IsFalse(): Evalúa condiciones booleanas
- Assert.IsNull() / Assert.IsNotNull(): Comprueba referencias nulas
- Assert.ThrowsException(): Verifica que se lance una excepción específica
[TestMethod]
public void Dividir_PorCero_LanzaExcepcion()
{
var calculadora = new Calculadora();
Assert.ThrowsException<DivideByZeroException>(() =>
calculadora.Dividir(10, 0));
}
Buenas prácticas en testing
Un nombre descriptivo para las pruebas facilita la comprensión y el mantenimiento. La convención común es MetodoAProbar_Escenario_ResultadoEsperado
.
Las pruebas deben ser independientes entre sí, sin depender del orden de ejecución ni del estado compartido. Cada prueba debe poder ejecutarse de forma aislada y producir el mismo resultado.
La cobertura de código indica qué porcentaje del código está siendo probado, pero es más importante la calidad de las pruebas que el porcentaje absoluto. Es preferible tener pocas pruebas bien diseñadas que muchas pruebas superficiales.
[TestMethod]
public void ObtenerEdad_FechaNacimientoValida_CalculaEdadCorrectamente()
{
// Arrange
var persona = new Persona();
var fechaNacimiento = new DateTime(1990, 5, 15);
var fechaActual = new DateTime(2024, 5, 15);
// Act
int edad = persona.CalcularEdad(fechaNacimiento, fechaActual);
// Assert
Assert.AreEqual(34, edad);
}
El testing en C# proporciona la confianza necesaria para refactorizar código, agregar nuevas funcionalidades y mantener la calidad del software a lo largo del tiempo. Una suite de pruebas bien diseñada actúa como una red de seguridad que detecta regresiones y facilita el desarrollo iterativo.
Lecciones de este módulo de CSharp
Lecciones de programación del módulo Testing del curso de CSharp.