Pruebas unitarias en .NET con Copilot

Resumen

Las pruebas unitarias en .NET son la primera capa de calidad que protege tu código de errores silenciosos, y con ayuda de Copilot puedes generarlas en minutos sin sacrificar tiempo de desarrollo. Aquí verás cómo configurar un proyecto con xUnit, Moq y Entity Framework InMemory para validar la lógica de un servicio real.

Por qué importan las pruebas unitarias en un proyecto de APIs

Muchas empresas omiten las pruebas unitarias y de integración porque consideran que toman demasiado tiempo y prefieren mandar a producción cuanto antes. Con la inteligencia artificial esa excusa desaparece: puedes generar la cobertura mínima de calidad mientras avanzas con el desarrollo.

¿Qué es una prueba unitaria? Es un test automatizado que valida una unidad pequeña de código (un método o servicio) de forma aislada, sin depender de servicios externos como bases de datos reales o loggers.

Cuando alguien modifica una lógica que no conoce a fondo, las pruebas avisan de inmediato si ese cambio rompió algo que ya funcionaba. Eso te ahorra horas de depuración y protege la estabilidad del proyecto.

Cómo configurar el proyecto de pruebas con xUnit

Lo primero es crear un proyecto independiente para tus tests. En Visual Studio busca la plantilla de xUnit, una de las bibliotecas más usadas en .NET para pruebas.

Nómbralo siguiendo el estándar CursoApis.Tests. Esa convención de terminar en Tests la reconocen muchas herramientas de integración continua de forma automática, así que vale la pena adoptarla desde el inicio.

Qué dependencias debes instalar

Desde el gestor de NuGet agrega tres paquetes esenciales:

  • Moq: te permite crear imitaciones (mocks) de servicios externos como Logger para que las pruebas no dependan de componentes ajenos a la lógica.
  • Entity Framework Core: necesario para trabajar con tu AppDbContext.
  • Entity Framework InMemory: ejecuta una base de datos en memoria, ideal para probar sin tocar una base real.

Elimina la prueba que viene por defecto en la plantilla y abre el archivo TaskService que servirá como referencia para generar los tests.

Cómo generar pruebas unitarias con Copilot paso a paso

Copilot ofrece dos modos de trabajo y conviene saber cuándo usar cada uno.

  • Ask: funciona como un chat. Le preguntas, te responde con texto y tú copias los fragmentos al proyecto.
  • Agent: toma control directo del código, hace los cambios y crea archivos por sí mismo.

Para este caso el modo Agent es más ágil. Deja activa la opción Active Document apuntando a TaskService y escribe un prompt como: "Crea las pruebas unitarias para el servicio de TaskService utilizando una base de datos en memoria para AppDbContext".

Por qué el plural en el prompt cambia el resultado

Fíjate en el detalle: pedir "pruebas unitarias" en plural hace que Copilot genere una batería completa para todos los métodos del servicio. Si escribes "prueba unitaria" en singular, lo más probable es que solo cubra uno de los métodos. Las palabras que eliges en el prompt definen el alcance del resultado.

¿Qué modelo de Copilot conviene usar para código? El plan gratuito incluye GPT Mini y funciona bien para casos básicos. Para proyectos más complejos, Claude Sonnet suele dar mejores resultados en contextos de programación.

Cómo verificar que las pruebas funcionan correctamente

Abre la vista Test Explorer en Visual Studio. Ahí aparecen las pruebas generadas, en este ejemplo fueron cuatro. Ejecútalas y deberías ver todas en verde.

Copilot estructura cada prueba siguiendo el patrón Triple A:

  • Arrange: configura el escenario. Crea un nombre único para la base de datos en memoria, instancia el AppDbContext y el TaskService.
  • Act: ejecuta el método que quieres probar.
  • Assert: comprueba que el resultado sea el esperado.

Qué pasa cuando rompes la lógica a propósito

Para dimensionar el valor real de los tests, modifica el método GetAll del TaskService y agrega un filtro absurdo como where ID < 0. Vuelve a ejecutar las pruebas.

El Test Explorer te marcará el fallo de inmediato: esperaba dos registros y recibió cero. Ese aviso temprano es justo lo que evita que un cambio descuidado llegue a producción. Cualquier desarrollador que toque código complejo se beneficia de esta red de seguridad.

Cómo ejecutar las pruebas desde la terminal con dotnet test

No dependes solo de Visual Studio. Abre una terminal en la carpeta del proyecto de pruebas y corre:

bash dotnet test

El resultado debe coincidir con el del Test Explorer. En el ejemplo aparece: total de cuatro pruebas, una fallida y tres exitosas. Esto mismo es lo que ejecutan los pipelines de integración continua, así que probarlo localmente te confirma que todo está listo para CI/CD.

Tu reto ahora es seguir usando Copilot para completar las pruebas de los demás servicios y alcanzar la cobertura total del proyecto. ¿Qué prompt vas a escribir para el siguiente servicio? Cuéntame en los comentarios cómo te fue.