Overview
La librería CodeDesignPlus.Net.xUnit.Microservice proporciona un conjunto de clases y atributos diseñados para simplificar y estandarizar las pruebas unitarias de microservicios en .NET. Facilita la creación de entornos de pruebas controlados, la gestión de dependencias externas y la generación de datos de prueba, lo que permite a los desarrolladores validar el comportamiento de sus microservicios de manera eficiente y confiable.
Propósito y alcance
Section titled “Propósito y alcance”El objetivo principal de esta librería es proporcionar una base sólida para las pruebas de integración y unitarias de microservicios, especialmente aquellos que utilizan patrones de diseño como agregados, eventos de dominio, entidades y DTOs. Permite a los desarrolladores probar su lógica de negocio en un entorno aislado, facilitando la detección temprana de errores y mejorando la calidad del software.
Principales características
Section titled “Principales características”- Entorno de prueba configurado: Crea un entorno de prueba basado en
WebApplicationFactorycon opciones de configuración personalizables. - Gestión de dependencias: Permite la gestión de dependencias externas como Redis, RabbitMQ, MongoDB y OpenTelemetry a través de Docker Compose.
- Autenticación de prueba: Incluye un
AuthHandlerpara simular un usuario autenticado en las pruebas. - Registro en memoria: Implementa un
InMemoryLoggerpara capturar y analizar los mensajes de registro durante las pruebas. - Atributos de prueba: Define atributos personalizados para facilitar la generación de datos de prueba para agregados, eventos de dominio, etc.
Casos de uso típicos
Section titled “Casos de uso típicos”- Pruebas de integración de microservicios: Validar el comportamiento de las APIs y la interacción con dependencias externas.
- Pruebas unitarias de lógica de negocio: Probar la funcionalidad de agregados, eventos de dominio y otros componentes del modelo de dominio.
- Pruebas basadas en datos: Generar datos de prueba dinámicamente a partir de atributos personalizados.
- Validación de registro: Inspeccionar los mensajes de registro generados durante la ejecución de pruebas.
Componentes Principales
Section titled “Componentes Principales”Server<TProgram>: Clase que extiendeWebApplicationFactorypara crear un entorno de prueba de un microservicio.ServerBase<TProgram>: Clase base para pruebas que facilita la interacción con el servidor creado porServer<TProgram>.ServerCompose: Clase para gestionar las dependencias externas utilizando Docker Compose.AuthHandler: Handler de autenticación de prueba que simula un usuario autenticado.InMemoryLoggerProvider,InMemoryLoggerFactory,InMemoryLogger: Componentes para capturar y gestionar los logs en memoria.- Atributos Personalizados:
AggregateAttribute<TAssemblyScan>: Provee datos de prueba para agregados.DomainEventAttribute<TAssemblyScan>: Provee datos de prueba para eventos de dominio.CommandAttribute<TAssemblyScan>: Provee datos de prueba para comandos.QueryAttribute<TAssemblyScan>: Provee datos de prueba para consultas.EntityAttribute<TAssemblyScan>: Provee datos de prueba para entidades.DataTransferObjectAttribute<TAssemblyScan>: Provee datos de prueba para DTOs.ErrorsAttribute<TAssemblyScan>: Provee datos de prueba para errores.StartupAttribute<TAssemblyScan>: Provee datos de prueba para la inicialización.
Directorysrc
DirectoryCodeDesignPlus.Net.xUnit.Microservice
DirectoryAttributes
- AggregateAttribute.cs
- CommandAttribute.cs
- DataTransferObjectAttribute.cs
- DomainEventAttribute.cs
- EntityAttribute.cs
- ErrorsAttribute.cs
- QueryAttribute.cs
- StartupAttribute.cs
DirectoryServer
- Server.cs
- ServerBase.cs
DirectoryAuthentication
- AuthHandler.cs
DirectoryLogger
- InMemoryLogger.cs
- InMemoryLoggerFactory.cs
- InMemoryLoggerProvider.cs
DirectoryServices
- collector-config.yml
- docker-compose.yml
- DockerCompose.cs
- ServerCompose.cs
DirectoryUtils
DirectoryLogger
- LoggerExtensions.cs
DirectoryReflection
- TypeExtensions.cs
Primeros Pasos
Section titled “Primeros Pasos”En esta sección, aprenderás a instalar y configurar la librería CodeDesignPlus.Net.xUnit.Microservice en tu proyecto de .NET. Además, explorarás cómo utilizar sus principales componentes para configurar pruebas unitarias y de integración para tus microservicios.
Requisitos previos
Section titled “Requisitos previos”- .NET 8 o superior.
- Un proyecto de microservicio basado en ASP.NET Core.
- Docker Desktop instalado para la gestión de dependencias externas.
- Una herramienta de pruebas unitarias como xUnit.
Instalación
Section titled “Instalación”Para instalar la librería CodeDesignPlus.Net.xUnit.Microservice, puedes utilizar el administrador de paquetes NuGet o la CLI de .NET. A continuación, se muestra un ejemplo de cómo instalar la librería utilizando la CLI de .NET:
dotnet add package CodeDesignPlus.Net.xUnit.MicroserviceInstall-Package CodeDesignPlus.Net.xUnit.Microservice<PackageReference Include="CodeDesignPlus.Net.xUnit.Microservice" Version="1.0.0" />Ejemplo rápido
Section titled “Ejemplo rápido”Este ejemplo muestra cómo usar Server y ServerBase para una prueba unitaria básica:
using CodeDesignPlus.Net.xUnit.Microservice.Server;
namespace CodeDesignPlus.Net.xUnit.Microservice.Test.Server;
public class ServerTest(Server<Program> server) : ServerBase<Program>(server), IClassFixture<Server<Program>>{ [Fact] public async Task GetWeatherForecast_ReturnsWeatherForecast() { //Act var response = await Client.GetAsync("/weatherforecast");
// Assert response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync();
var data = Serializers.JsonSerializer.Deserialize<IEnumerable<Api.WeatherForecast>>(responseString);
Assert.NotNull(data); Assert.NotEmpty(data); }}Servicios
Section titled “Servicios”La librería CodeDesignPlus.Net.xUnit.Microservice proporciona los siguientes servicios y componentes principales:
AuthHandler
Section titled “AuthHandler”El AuthHandler es un AuthenticationHandler que simula la autenticación de un usuario en las pruebas. Permite a los desarrolladores probar la lógica de autorización y autenticación de sus microservicios en un entorno controlado.
InMemoryLoggerProvider
Section titled “InMemoryLoggerProvider”El InMemoryLoggerProvider es un proveedor de registro en memoria que captura y almacena los mensajes de registro generados durante las pruebas. Permite a los desarrolladores inspeccionar y analizar los mensajes de registro para validar el comportamiento de sus microservicios.
InMemoryLoggerFactory
Section titled “InMemoryLoggerFactory”El InMemoryLoggerFactory implementa una factoría de ILogger que crea instancias de InMemoryLogger. Proporciona una interfaz común para la creación y gestión de instancias de ILogger en las pruebas.
Atributos Personalizados
Section titled “Atributos Personalizados”La librería CodeDesignPlus.Net.xUnit.Microservice define una serie de atributos personalizados para facilitar la generación de datos de prueba para agregados, eventos de dominio, entidades, DTOs y otros componentes del modelo de dominio. Estos atributos permiten a los desarrolladores definir datos de prueba de forma declarativa y reutilizable.
AggregateAttribute
Section titled “AggregateAttribute”El AggregateAttribute permite a los desarrolladores definir datos de prueba para agregados en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para los agregados de un microservicio.
DomainEventAttribute
Section titled “DomainEventAttribute”El DomainEventAttribute permite a los desarrolladores definir datos de prueba para eventos de dominio en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para los eventos de dominio de un microservicio.
CommandAttribute
Section titled “CommandAttribute”El CommandAttribute permite a los desarrolladores definir datos de prueba para comandos en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para los comandos de un microservicio.
QueryAttribute
Section titled “QueryAttribute”El QueryAttribute permite a los desarrolladores definir datos de prueba para consultas en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para las consultas de un microservicio.
EntityAttribute
Section titled “EntityAttribute”El EntityAttribute permite a los desarrolladores definir datos de prueba para entidades en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para las entidades de un microservicio.
DataTransferObjectAttribute
Section titled “DataTransferObjectAttribute”El DataTransferObjectAttribute permite a los desarrolladores definir datos de prueba para DTOs en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para los DTOs de un microservicio.
ErrorsAttribute
Section titled “ErrorsAttribute”El ErrorsAttribute permite a los desarrolladores definir datos de prueba para errores en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para los errores de un microservicio.
StartupAttribute
Section titled “StartupAttribute”El StartupAttribute permite a los desarrolladores definir datos de prueba para la inicialización en las pruebas unitarias. Proporciona una forma sencilla de generar datos de prueba para la inicialización de un microservicio.
Conclusiones
Section titled “Conclusiones”La librería CodeDesignPlus.Net.xUnit.Microservice simplifica la creación de entornos de pruebas unitarias y de integración para microservicios basados en .NET. Al proporcionar una base sólida para la gestión de dependencias, la generación de datos de prueba y el registro de información, la librería ayuda a los desarrolladores a crear software de alta calidad y confiabilidad.