paint-brush
Ejecute fácilmente bases de datos locales utilizando C# Testcontainers para MongoDBpor@devleader
190 lecturas

Ejecute fácilmente bases de datos locales utilizando C# Testcontainers para MongoDB

por Dev Leader7m2024/04/02
Read on Terminal Reader

Demasiado Largo; Para Leer

En este artículo, le presentaré los conceptos básicos de Testcontainers. A partir de ahí, demostraré lo sencillo que es interactuar con su base de datos recién creada a través del paquete C# MongoDB.Driver NuGet, ¡casi como si ni siquiera supiera que hay un contenedor activado! Profundicemos en ello.
featured image - Ejecute fácilmente bases de datos locales utilizando C# Testcontainers para MongoDB
Dev Leader HackerNoon profile picture
0-item

En este artículo, lo guiaré a través de C# Testcontainers para MongoDB. Me encanta usar Testcontainers para el trabajo con bases de datos locales cuando no quiero pensar en administrar la sobrecarga de activar y desactivar una base de datos, o administrar algo en la nube. MongoDB no es una excepción aquí, ya que es un sueño trabajar con el paquete C# Testcontainers NuGet que tenemos para MongoDB.


En este artículo, le presentaré los conceptos básicos de Testcontainers. A partir de ahí, demostraré lo sencillo que es interactuar con su base de datos recién creada a través del paquete C# MongoDB.Driver NuGet, ¡casi como si ni siquiera supiera que había un contenedor activado! Profundicemos en ello.


Descripción general de los contenedores de prueba de C#

Testcontainers es un increíble paquete NuGet que puede mejorar enormemente su flujo de trabajo de pruebas y desarrollo local al crear aplicaciones .NET. Proporciona una forma sencilla y eficaz de gestionar contenedores Docker, lo que le permite crear instancias ligeras y aisladas y derribarlas como si nada hubiera pasado.


Eso significa que con Testcontainers, ya no tendrá que preocuparse por configurar y desmantelar bases de datos de prueba o lidiar con archivos de configuración complejos. Maneja todos los detalles de la gestión de contenedores, lo que hace que este proceso parezca trivial; seguro que no querría manejar esto manualmente.


Algunos de los beneficios clave de Testcontainers incluyen:

  • Su capacidad para proporcionar un entorno de prueba consistente y reproducible. Puede definir la versión exacta del servicio y la configuración que necesita, asegurando que los resultados de sus pruebas sean confiables y consistentes en diferentes entornos.


  • La velocidad y flexibilidad que aporta a su flujo de trabajo de pruebas y desarrollo. Al utilizar contenedores Docker livianos, puede activar y desactivar rápidamente entornos de prueba según demanda. No es necesario configurar la nube ni los recursos compartidos con anticipación... Simplemente genialidad sobre la marcha.


  • Integración perfecta con herramientas y marcos de prueba existentes en el ecosistema DotNet, como Xunit, NUnit y BenchmarkDotNet. Esto le permite incorporar fácilmente instancias de servicios en contenedores en sus conjuntos de pruebas existentes sin modificaciones importantes.


En este artículo, nos centraremos en cómo podemos usar C# Testcontainers para MongoDB en particular. Gran parte de los consejos cubiertos aquí serán aplicables a otros servicios, especialmente bases de datos, pero mantendremos la vista puesta en MongoDB.


Configurar contenedores de prueba en C#

Para comenzar con Testcontainers en C#, deberá instalar y configurar las dependencias necesarias en su proyecto. Siga los pasos a continuación para configurar Testcontainers para MongoDB en C#.

1. Instalación de contenedores de prueba

Generalmente, el primer paso sería instalar el paquete Testcontainers NuGet en su proyecto C#. Abriría la consola del Administrador de paquetes NuGet y ejecutaría el siguiente comando:

 Install-Package Testcontainers


Sin embargo, necesitamos la versión MongoDB de este paquete (estoy usando la versión 3.8.0 al momento de escribir este artículo) que incluye el paquete base Testcontainers. Puede instalarlo a través de la interfaz de usuario del administrador de paquetes o con este comando:

 Install-Package Testcontainers.MonogoDB

2. Configurar contenedores de prueba para MongoDB

Una vez que haya instalado Testcontainers, deberá configurarlo para MongoDB. Esto implica configurar un contenedor MongoDB con la configuración requerida. Aquí hay un ejemplo de cómo puede configurar Testcontainers para MongoDB en C#:

 using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();


En el ejemplo anterior, creamos una nueva instancia de MongoDbBuilder y especificamos la imagen de MongoDB y el enlace del puerto. El método WithImage establece la imagen para el contenedor MongoDB, por lo que usar "mongo:latest" siempre extraerá la imagen más reciente.


Opcionalmente, podríamos usar el enlace de puertos para configurar qué puertos queremos usar explícitamente:

 using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();


El código anterior utiliza el método WithPortBinding para vincular el puerto 27017 del contenedor al puerto 1337 de la máquina host. Veremos en las próximas secciones que, a menos que tenga una necesidad específica de vincular puertos, potencialmente puede dejar esto así. Podemos obtener una cadena de conexión dinámica, ¡lo cual es muy conveniente!

3. Iniciar y detener el contenedor MongoDB

Después de configurar Testcontainers para MongoDB, puede iniciar y detener el contenedor según sea necesario. A continuación se muestran ejemplos de código para iniciar y detener el contenedor:


Para iniciar el contenedor MongoDB:

 await container.StartAsync();


Para detener el contenedor MongoDB:

 await _container.StopAsync();


Recuerde que el tipo MongoDbContainer se puede eliminar, así que llame DisposeAsync para limpiarlo cuando esté listo.


Uso de C# Testcontainers para MongoDB en la práctica

Ahora que hemos visto cómo girar y derribar contenedores, ¿qué se supone que debemos hacer con ellos? ¡Tenemos muchas opciones y, verdaderamente, el límite es tu propia imaginación (y el tiempo, el dinero y otros recursos…)!


La mayoría de las personas aprovechan los contenedores de prueba de C# para escribir pruebas funcionales o de integración. Puede hacer coincidir Testcontainers con xUnit o NUnit, por ejemplo, y escribir pruebas que interactúen con una base de datos real.


Para mí, necesitaba conectar C# Testcontainers para MongoDB hasta BenchmarkDotNet para poder comparar la inserción de registros en MongoDB . Un caso de uso similar en el que necesitaba bases de datos locales transitorias, pero no necesariamente para un marco de prueba.


De todos modos, necesitamos poder conectarnos a estos contenedores de bases de datos MongoDB desde C#, y las próximas subsecciones cubrirán eso.

Conexión a C# Testcontainers para MongoDB con MongoDB.Driver

Supongamos que leyó las secciones anteriores y tiene instalado el paquete MongoDB correcto para Testcontainers. Si hojeó esta sección, regrese, léala y obtenga el paquete correcto. De lo contrario, ¡te estarás preguntando por qué no puedes encontrar las dependencias correctas!


También necesitarás instalar el paquete MongoDB.Driver NuGet. Esto es lo que usaremos para establecer una conexión con el contenedor de la base de datos que activamos. Tengo otros artículos que puedes leer si quieres más explicaciones sobre cómo funciona MongoDB.Driver en general:


Con los paquetes correctos listos para funcionar, podemos combinar el código que vimos anteriormente con algún código del controlador MongoDB para unir todo:

 using MongoDB.Bson; using MongoDB.Driver; using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build(); await container.StartAsync(); string connectionString = container.GetConnectionString(); MongoClient mongoClient = new MongoClient(connectionString); IMongoDatabase database = mongoClient.GetDatabase("test"); IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("test");


En el ejemplo anterior, podemos llamar GetConnectionString() en el contenedor MongoDB recién creado desde Testcontainers. Lo sorprendente de esto es que no importa cómo configure su Testcontainer para MongoDB usando el patrón de creación que vemos en este código y anteriormente en el artículo, GetConnectionString() le brindará lo que necesita para conectarse.


Debido a que MongoClient toma una cadena de conexión como único argumento, ¡es trivial obtener acceso a la base de datos MongoDB para comenzar a trabajar con ella de inmediato!

Realizar operaciones CRUD en el contenedor de prueba MongoDB

Ahora que tenemos nuestro contenedor de prueba MongoDB configurado y tenemos un MongoClient conectado, podemos comenzar a realizar operaciones CRUD en él. Los detalles de conexión proporcionados por la instancia del contenedor hicieron que fuera muy fácil combinar estas dos cosas y, verdaderamente, podemos centrarnos solo en las llamadas al método MongoDB.Driver para CRUD.


A continuación se muestra un ejemplo de cómo realizar una operación CRUD simple:

 // using code from earlier examples... // Create await collection.InsertOneAsync(new BsonDocument() { ["Name"] = "Nick Cosentino", }); // Read var filterBuilder = Builders<BsonDocument>.Filter; var filter = filterBuilder.Eq("Name", "Nick Cosentino"); var results = collection.Find(filter); // Update var updateBuilder = Builders<BsonDocument>.Update; var update = updateBuilder.Set("Name", "Dev Leader"); collection.UpdateOne(filter, update); // Delete filter = filterBuilder.Eq("Name", "Dev Leader"); collection.DeleteOne(filter);


Usando los fragmentos de código anteriores, ya estábamos en funcionamiento con nuestra instancia de contenedor MongoDB y MongoClient . Como resultado, puede ver en el fragmento de código anterior que podemos trabajar directamente con nuestro IMongoCollection<BsonDocument> que obtuvimos de la configuración anterior.


Esto ayuda a ilustrar que una vez que tenga el contenedor acoplable MongoDB en funcionamiento a través de Testcontainers, ¡no tiene que tratar las cosas de ninguna manera especial una vez que se conecte a él!


Conclusión de los contenedores de prueba de C# para MongoDB

Para concluir, C# Testcontainers para MongoDB es una forma increíblemente sencilla de poner en funcionamiento un almacén de datos transitorio de MongoDB para sus pruebas y desarrollo. Si bien este artículo no se centró en casos de uso específicos, es de esperar que comprenda mejor qué tan transparente se siente colocar un controlador MongoDB encima de Testcontainers para interactuar con MongoDB.


Dado que C# Testcontainers elimina el dolor de cabeza de la configuración, el desmontaje e incluso la administración de cadenas de conexión, es una recomendación fácil de mi parte si desea comenzar a utilizar MongoDB para uso local.


Si esto le resultó útil y está buscando más oportunidades de aprendizaje, considere suscribirse a mi boletín semanal gratuito de ingeniería de software y vea mis videos gratuitos en YouTube .


También publicado aquí