Introducción
Probar correctamente los servicios es clave para construir aplicaciones mantenibles y confiables. En esta guía verás cómo crear y ejecutar pruebas unitarias en .NET 8 utilizando NUnit y Moq para simular dependencias, simplificando la escritura, ejecución y mantenimiento de las pruebas.
Requisitos
C sharp, .NET 8, Docker, NUnit y Moq
Qué vamos a probar
Validaremos un servicio encargado de crear pedidos en una app de pizzas. La interfaz expone un método Execute que recibe una solicitud de creación de pedido y un token de cancelación, y devuelve un resultado que indica éxito o error. El servicio inyecta repositorios de clientes, productos y pedidos, además de una unidad de trabajo para confirmar la transacción. La lógica principal es: validar que todas las cantidades de ítems sean mayores que cero, comprobar que el cliente existe, cargar cada producto por su identificador, construir el pedido con sus ítems, persistirlo y confirmar la operación. Si algo falla, se devuelve un resultado de error con un mensaje descriptivo.
Enfoque de pruebas
Nos centraremos en dos escenarios: uno exitoso y otro de error por cantidad inválida. Crearemos un proyecto de pruebas NUnit dentro de la misma solución y usaremos Moq para simular las interfaces que consume el servicio.
Estructura del proyecto de pruebas
Definimos una clase CreateOrderServiceTests con campos Mock para las interfaces IOrderRepository, ICustomerRepository, IProductRepository e IUnitOfWork. En el método de inicialización SetUp, instanciamos los mocks y creamos el servicio inyectando los objetos simulados.
Escenario 1: crear pedido con éxito
Arrange: creamos un cliente válido y varios productos representativos como una pizza, una bebida y un postre. Preparamos una lista de ítems de pedido con cantidades válidas y armamos la solicitud de creación del pedido con el identificador del cliente y los ítems.
Setup: configuramos el repositorio de clientes para que al consultar por el identificador devuelva el cliente creado. Configuramos el repositorio de productos para que, por cada identificador de producto utilizado en los ítems, devuelva el producto correspondiente.
Act: ejecutamos el método Execute del servicio con la solicitud y un token de cancelación.
Assert: verificamos que el resultado indique éxito, que el mensaje devuelto coincida con el esperado para creación correcta y que se hayan invocado exactamente una vez la obtención del cliente y tres veces la obtención de productos. También es recomendable comprobar que se llamó a la creación del pedido en el repositorio y al commit de la unidad de trabajo.
Ejecución de pruebas
Desde la terminal, ejecuta el comando dotnet test en la carpeta de la solución. Si fuese necesario, especifica la solución con dotnet test PizzApp.sln. También puedes correrlas desde el explorador de pruebas de tu IDE.
Escenario 2: error por cantidad de ítem inválida
El servicio valida primero que ningún ítem tenga cantidad menor o igual a cero. Si encuentra uno, devuelve un resultado de error y no consulta repositorios ni persiste nada.
Arrange: creamos una solicitud con un solo ítem con cantidad igual a cero o un valor negativo.
Act: ejecutamos el método Execute.
Assert: comprobamos que el resultado indique error, que el mensaje corresponda a cantidad de ítem inválida y verificamos que los repositorios de clientes y productos no hayan sido invocados en absoluto. Para cubrir más casos con poco código, podemos parametrizar la prueba con el atributo TestCase, por ejemplo usando cero y un valor negativo.
Buenas prácticas adicionales
Aislar el dominio de infraestructura mediante interfaces facilita el mocking y acelera la ejecución de pruebas. Además, mantener mensajes de negocio consistentes, usar datos realistas en Arrange y verificar tanto el estado del resultado como las interacciones con dependencias aumenta la robustez del conjunto de pruebas.
Sobre Q2BSTUDIO
En Q2BSTUDIO desarrollamos aplicaciones a medida y software a medida con foco en calidad, escalabilidad, pruebas automatizadas y entregas continuas. Integramos prácticas de calidad en el ciclo de vida de desarrollo para acelerar el time to market y reducir riesgos. Si tu organización necesita llevar estas prácticas a producción con arquitecturas modernas y despliegues confiables, descubre cómo podemos ayudarte en nuestro servicio de desarrollo de software a medida. También impulsamos tu pipeline de QA y CI CD con iniciativas de automatización de procesos para ganar eficiencia y trazabilidad de extremo a extremo.
Competencias y palabras clave
Además de nuestra experiencia en pruebas unitarias con .NET 8, NUnit y Moq, somos especialistas en inteligencia artificial, ia para empresas y agentes IA, ciberseguridad y pentesting, servicios cloud aws y azure, y servicios inteligencia de negocio con power bi. Si buscas una alianza tecnológica que te acompañe desde el backend hasta la analítica avanzada, Q2BSTUDIO es tu compañero ideal.
Repositorio de referencia
Puedes revisar un proyecto de ejemplo con escenarios similares en el siguiente repositorio en GitHub.