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.
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:
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.
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#.
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
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!
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.
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.
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!
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!
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í