Resumen

Crear pruebas unitarias en .NET ya no es opcional: es la capa mínima de calidad que garantiza que tu código funciona y se mantiene estable. Con apoyo de inteligencia artificial como Copilot en Visual Studio, es más rápido, claro y eficiente. Aquí verás cómo configurar xUnit, usar Entity Framework InMemory, y validar resultados con Test Explorer y el comando dotnet test.

¿Qué son y por qué importan las pruebas unitarias en .NET con xUnit?

Las pruebas unitarias validan la lógica de forma aislada y te alertan cuando un cambio rompe un flujo existente. Evitan que “funcione aquí, falle allá”. En el flujo descrito, se trabaja con xUnit, una de las bibliotecas más usadas en .NET, y se adopta el patrón Triple A: arrange, act, assert.

  • Arrange: preparar datos, contexto en memoria y servicio a probar.
  • Act: ejecutar el método bajo prueba.
  • Assert: comprobar resultados esperados.

Cuando se introdujo un filtro inválido (ID < 0) en el método de obtención, las pruebas avisaron que se esperaban dos registros y no llegó ninguno. Esta es la prueba de su valor: detectan regresiones de inmediato.

¿Cómo ayuda la inteligencia artificial con Copilot y modelos GPT Mini?

Copilot ofrece dos modos: Ask (chat para generar fragmentos y pegarlos) y Agent (el agente aplica cambios en archivos y crea nuevos). Se puede fijar el active document para dar contexto. Elegir el modelo importa: se usó un modelo gratuito, GPT Mini, que generó pruebas correctas y compilables.

  • Instrucciones claras: usa plural “pruebas unitarias” para que genere varias pruebas, no solo una.
  • Contexto activo: referencia el archivo del servicio, por ejemplo, TaskService.
  • Modelo adecuado: mejor rendimiento al escribir código.

¿Cómo configurar el proyecto de tests con xUnit y EF InMemory?

Se crea un proyecto con plantilla de xUnit y un nombre estándar como CursoApis.test. Ese sufijo facilita que herramientas de integración detecten el proyecto automáticamente. Se selecciona .NET 10 y se agregan dependencias desde “nuvex”: una librería de mock para imitar servicios externos (por ejemplo, logger) y Entity Framework con el proveedor InMemory. Luego, se elimina la prueba de ejemplo incluida por defecto.

  • xUnit: marco de pruebas para .NET.
  • Entity Framework InMemory: base de datos en memoria para aislar pruebas.
  • Mocking: elimina dependencias externas en los tests.

Ejemplo de estructura con el patrón Triple A en xUnit:

// Arrange: configurar AppDbContext en memoria y crear TaskService.
// Act: llamar el método a probar, por ejemplo, GetAll.
// Assert: validar con Assert.Equal, Assert.NotNull, etc.

¿Qué prompt usar para generar pruebas unitarias con DbContext en memoria?

Para que Copilot construya todo, se sugirió un prompt directo y específico sobre el contexto en memoria:

Crea las pruebas unitarias para el servicio de TaskService utilizando una base de datos en memoria para App DbContext.

Puntos clave al redactarlo: - Especifica “pruebas unitarias” en plural. - Menciona el servicio: TaskService. - Indica el uso de App DbContext en memoria.

¿Cómo ejecutar y validar con Test Explorer y dotnet test?

Tras generar y compilar, se abre Test Explorer para ver las pruebas creadas: en el caso mostrado, cuatro pruebas listas para ejecutar. Al correrlas, todas pasaron. Después, al introducir el filtro inválido (ID < 0), el panel indicó 1 fallo y 3 exitosas, señalando exactamente qué se rompió.

  • Visualización clara: Test Explorer lista y agrupa pruebas.
  • Retroalimentación inmediata: muestra éxito, fallos y mensajes esperados vs. obtenidos.
  • Cobertura progresiva: añade más pruebas hasta cubrir el servicio por completo.

También puedes ejecutar en la terminal del proyecto de pruebas:

dotnet test

El resultado coincide con Test Explorer: total de pruebas, cuántas pasaron y cuántas fallaron.

¿Qué errores comunes detectan las pruebas y cómo evitar regresiones?

Cambios “aparentemente inocentes” en lógica compleja pueden romper escenarios no obvios. Las pruebas con base de datos en memoria y el patrón Triple A te permiten verificar que el servicio, como TaskService, siga devolviendo los resultados esperados.

  • Aislar dependencias: usa mock para servicios externos y EF InMemory para datos.
  • Repetibilidad: cada test usa su propia base en memoria.
  • Confianza al refactorizar: si algo falla, lo sabrás al instante.

¿Listo para ampliar la cobertura de tu proyecto de APIs con .NET? Cuéntame qué métodos te faltan por probar o qué obstáculos encuentras al crear tus primeras pruebas con Copilot.