Pruebas unitarias en .NET con Copilot
Clase 20 de 21 • Curso de APIs con .NET
Contenido del curso
Estructura de una Web API
- 7

Configuración CORS en .NET: solución al error
07:08 min - 8

Rutas en APIs .NET con parámetros
12:50 min - 9

Documentación de APIs con OpenAPI y Swagger en .NET
14:25 min - 10

Middlewares en ASP.NET: pipeline y custom middleware
10:32 min - 11

Inyección de dependencias en .NET: ILogger
09:18 min - 12

Middleware para autenticación básica en .NET
08:17 min
Arquitectura y Middlewares
- 13

Configuración de Entity Framework Core en .NET
07:31 min - 14

Modelos C# y relaciones con Entity Framework
10:01 min - 15

Servicios con Entity Framework para ASP.NET
13:51 min - 16

Controladores API en .NET con Swagger
14:46 min - 17

Conectar API .NET con SQL Server
09:51 min - 18

Conectar .NET API con PostgreSQL usando Entity Framework
06:57 min - 19

Qué es Clean Architecture en .NET
09:08 min - 20

Pruebas unitarias en .NET con Copilot
Viendo ahora - 21

Qué sigue después de tu API con .NET
02:16 min
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.