Dans cet article, je vais vous guider à travers les conteneurs de test C# pour MongoDB ! J'adore utiliser Testcontainers pour le travail sur une base de données locale lorsque je ne veux pas penser à la gestion des frais généraux liés à la création et à la destruction d'une base de données, ou à la gestion de quelque chose dans le cloud. MongoDB ne fait pas exception ici car le package NuGet C# Testcontainers que nous avons pour MongoDB est un rêve avec lequel travailler.
Dans cet article, je vais vous présenter les bases de Testcontainers. À partir de là, je vais démontrer à quel point il est simple d'interagir avec votre base de données nouvellement créée via le package C# MongoDB.Driver NuGet - presque comme si vous ne saviez même pas qu'un conteneur avait été créé ! Plongeons-y.
Testcontainers est un package NuGet génial qui peut considérablement améliorer votre flux de travail de test et de développement local lors de la création d'applications .NET. Il fournit un moyen simple et efficace de gérer les conteneurs Docker, vous permettant de créer des instances légères et isolées et de les détruire comme si de rien n'était !
Cela signifie qu'avec Testcontainers, vous n'avez plus à vous soucier de la configuration et du démontage des bases de données de test ou de la gestion de fichiers de configuration complexes. Il gère tous les détails de la gestion des conteneurs, ce qui rend ce processus trivial – je ne voudrais certainement pas gérer cela manuellement.
Certains des principaux avantages de Testcontainers incluent :
Pour cet article, nous nous concentrerons sur la façon dont nous pouvons utiliser les conteneurs de test C# pour MongoDB en particulier. Une grande partie des conseils donnés ici seront applicables à d'autres services, notamment aux bases de données, mais nous garderons le cap sur MongoDB.
Pour démarrer avec Testcontainers en C#, vous devrez installer et configurer les dépendances nécessaires dans votre projet. Suivez les étapes ci-dessous pour configurer Testcontainers pour MongoDB en C#.
Généralement, la première étape consiste à installer le package Testcontainers NuGet dans votre projet C#. Vous ouvririez la console NuGet Package Manager et exécuteriez la commande suivante :
Install-Package Testcontainers
Cependant, nous avons besoin de la version MongoDB de ce package (j'utilise la version 3.8.0 au moment de la rédaction) qui inclut le package de base Testcontainers. Vous pouvez l'installer via l'interface utilisateur du gestionnaire de packages ou avec cette commande :
Install-Package Testcontainers.MonogoDB
Une fois que vous avez installé Testcontainers, vous devez le configurer pour MongoDB. Cela implique de configurer un conteneur MongoDB avec les paramètres requis. Voici un exemple de la façon dont vous pouvez configurer Testcontainers pour MongoDB en C# :
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();
Dans l'exemple ci-dessus, nous créons une nouvelle instance de MongoDbBuilder
et spécifions l'image MongoDB et la liaison de port. La méthode WithImage
définit l'image du conteneur MongoDB, donc l'utilisation de « mongo:latest » extraira toujours la dernière image.
En option, nous pourrions utiliser la liaison de port pour configurer les ports que nous souhaitons utiliser explicitement :
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();
Le code ci-dessus utilise la méthode WithPortBinding
qui lie le port 27017 du conteneur au port 1337 de la machine hôte. Nous verrons dans les sections à venir qu'à moins que vous n'ayez un besoin spécifique de lier des ports, vous pouvez potentiellement laisser cela tel quel. On peut obtenir une chaîne de connexion dynamique, ce qui est très pratique !
Après avoir configuré Testcontainers pour MongoDB, vous pouvez démarrer et arrêter le conteneur selon vos besoins. Voici des exemples de code pour démarrer et arrêter le conteneur :
Pour démarrer le conteneur MongoDB :
await container.StartAsync();
Pour arrêter le conteneur MongoDB :
await _container.StopAsync();
N'oubliez pas que le type MongoDbContainer peut être supprimé, alors appelez DisposeAsync
pour nettoyer lorsque vous êtes prêt.
Maintenant que nous avons vu comment faire tourner et démonter des conteneurs, que sommes-nous censés en faire ? Nous avons de nombreuses options et, en réalité, la limite est votre propre imagination (et le temps, l'argent et les autres ressources…) !
La plupart des gens utilisent C# Testcontainers pour écrire des tests d'intégration ou fonctionnels . Vous pouvez faire correspondre Testcontainers avec xUnit ou NUnit, par exemple, et écrire des tests qui interagissent avec une base de données réelle.
Pour moi, je devais câbler C# Testcontainers pour MongoDB jusqu'à BenchmarkDotNet afin de pouvoir comparer l'insertion d'enregistrements dans MongoDB ! Un cas d'utilisation similaire où j'avais besoin de bases de données locales transitoires, mais pas nécessairement pour un framework de test.
Quoi qu'il en soit, nous devons pouvoir nous connecter à ces conteneurs de base de données MongoDB à partir de C#, et ces prochaines sous-sections couvriront cela.
Supposons que vous ayez lu les sections précédentes et que le package MongoDB correct soit installé pour Testcontainers. Si vous avez parcouru cette section, revenez en arrière, lisez-la et obtenez le bon package. Sinon, vous vous demanderez pourquoi vous ne trouvez pas les bonnes dépendances !
Vous devrez également installer le package MongoDB.Driver NuGet. C'est ce que nous allons utiliser pour établir une connexion au conteneur de base de données que nous avons lancé. J'ai d'autres articles que vous pouvez lire si vous souhaitez plus d'explications sur le fonctionnement de MongoDB.Driver en général :
Avec les bons packages prêts à l'emploi, nous pouvons combiner le code que nous avons vu plus tôt avec du code du pilote MongoDB pour coller les choses ensemble :
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");
Dans l'exemple ci-dessus, nous pouvons appeler GetConnectionString()
sur le conteneur MongoDB nouvellement lancé à partir de Testcontainers. Ce qui est génial, c'est que peu importe la façon dont vous configurez votre Testcontainer pour MongoDB à l'aide du modèle de générateur que nous voyons dans ce code et plus tôt dans l'article, GetConnectionString()
vous fournira ce dont vous avez besoin pour vous connecter.
Étant donné que MongoClient
prend une chaîne de connexion comme argument unique, il est trivial d'accéder à la base de données MongoDB pour commencer à travailler avec elle immédiatement !
Maintenant que notre MongoDB Testcontainer est configuré et qu'un MongoClient
y est connecté, nous pouvons commencer à y effectuer des opérations CRUD. Les détails de connexion fournis par l'instance de conteneur ont facilité la combinaison de ces deux éléments et, en réalité, nous pouvons nous concentrer uniquement sur les appels de méthode MongoDB.Driver pour CRUD.
Voici un exemple d'exécution d'une opération 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);
En utilisant les extraits de code précédents, nous étions déjà opérationnels avec notre instance de conteneur MongoDB et un MongoClient
. En conséquence, vous pouvez voir dans l'extrait de code ci-dessus que nous pouvons travailler directement avec notre IMongoCollection<BsonDocument>
que nous avons obtenu à partir de la configuration précédente.
Cela permet d'illustrer qu'une fois que le conteneur Docker MongoDB est opérationnel via Testcontainers, vous n'avez pas à traiter les choses d'une manière particulière une fois que vous y êtes connecté !
Pour conclure, C# Testcontainers pour MongoDB est un moyen incroyablement simple de mettre en place et de faire fonctionner un magasin de données MongoDB transitoire pour vos tests et votre développement. Bien que cet article ne se concentre pas sur des cas d'utilisation spécifiques, nous espérons que vous comprenez mieux à quel point il est transparent de superposer un pilote MongoDB au-dessus de Testcontainers pour interagir avec MongoDB.
Étant donné que C# Testcontainers simplifie la configuration, le démontage et même la gestion des chaînes de connexion, c'est une recommandation simple de ma part si vous souhaitez être opérationnel avec MongoDB pour une utilisation locale.
Si vous avez trouvé cela utile et que vous recherchez davantage d'opportunités d'apprentissage, pensez à vous abonner à ma newsletter hebdomadaire gratuite sur le génie logiciel et regardez mes vidéos gratuites sur YouTube !
Également publié ici