paint-brush
Führen Sie ganz einfach lokale Datenbanken mit C#-Testcontainern für MongoDB ausvon@devleader
273 Lesungen

Führen Sie ganz einfach lokale Datenbanken mit C#-Testcontainern für MongoDB aus

von Dev Leader7m2024/04/02
Read on Terminal Reader

Zu lang; Lesen

In diesem Artikel führe ich Sie in die Grundlagen von Testcontainern ein. Anschließend zeige ich Ihnen, wie einfach es ist, über das C# MongoDB.Driver NuGet-Paket mit Ihrer neu erstellten Datenbank zu interagieren – fast so, als ob Sie nicht einmal wüssten, dass ein Container gestartet wurde! Lassen Sie uns tiefer in die Materie eintauchen.
featured image - Führen Sie ganz einfach lokale Datenbanken mit C#-Testcontainern für MongoDB aus
Dev Leader HackerNoon profile picture
0-item

In diesem Artikel führe ich Sie durch C#-Testcontainer für MongoDB! Ich liebe es, Testcontainer für die Arbeit mit lokalen Datenbanken zu verwenden, wenn ich nicht über den Aufwand nachdenken möchte, der mit dem Auf- und Abbau einer Datenbank oder der Verwaltung von etwas in der Cloud verbunden ist. MongoDB ist hier keine Ausnahme, da die Arbeit mit dem C# Testcontainers NuGet-Paket, das wir für MongoDB haben, ein Traum ist.


In diesem Artikel stelle ich Ihnen die Grundlagen von Testcontainern vor. Von dort aus werde ich zeigen, wie einfach es ist, über das C#-MongoDB.Driver-NuGet-Paket mit Ihrer neu erstellten Datenbank zu interagieren – fast so, als würden Sie nicht einmal wissen, dass ein Container gestartet wurde! Lassen Sie uns eintauchen.


Übersicht über C#-Testcontainer

Testcontainers ist ein fantastisches NuGet-Paket, das Ihren Test- und lokalen Entwicklungsworkflow beim Erstellen von .NET-Anwendungen erheblich verbessern kann. Es bietet eine einfache und effektive Möglichkeit, Docker-Container zu verwalten, sodass Sie leichte und isolierte Instanzen hochfahren und herunterfahren können, als wäre nie etwas passiert!


Das bedeutet, dass Sie sich mit Testcontainern keine Gedanken mehr über den Auf- und Abbau von Testdatenbanken oder den Umgang mit komplexen Konfigurationsdateien machen müssen. Es kümmert sich um alle Details der Containerverwaltung, wodurch sich dieser Prozess trivial anfühlt – ich würde das auf keinen Fall manuell erledigen wollen.


Zu den wichtigsten Vorteilen von Testcontainern gehören:

  • Seine Fähigkeit, eine konsistente und reproduzierbare Testumgebung bereitzustellen. Sie können genau die Serviceversion und Konfiguration definieren, die Sie benötigen, und so sicherstellen, dass Ihre Testergebnisse in verschiedenen Umgebungen zuverlässig und konsistent sind.


  • Die Geschwindigkeit und Flexibilität, die es Ihrem Test- und Entwicklungsworkflow verleiht. Durch die Verwendung leichter Docker-Container können Sie Testumgebungen bei Bedarf schnell hoch- und herunterfahren. Keine vorherige Konfiguration der Cloud oder gemeinsam genutzter Ressourcen … Einfach großartig.


  • Nahtlose Integration mit bestehenden Test-Frameworks und Tools im DotNet-Ökosystem, wie Xunit, NUnit und BenchmarkDotNet. Dadurch können Sie containerisierte Serviceinstanzen einfach und ohne größere Änderungen in Ihre vorhandenen Testsuiten integrieren.


In diesem Artikel konzentrieren wir uns darauf, wie wir C#-Testcontainer insbesondere für MongoDB verwenden können. Viele der hier behandelten Ratschläge werden auf andere Dienste anwendbar sein, insbesondere auf Datenbanken, aber wir behalten MongoDB im Auge.


Testcontainer in C# einrichten

Um mit Testcontainern in C# zu beginnen, müssen Sie die erforderlichen Abhängigkeiten in Ihrem Projekt installieren und konfigurieren. Führen Sie die folgenden Schritte aus, um Testcontainer für MongoDB in C# einzurichten.

1. Testcontainer installieren

Im Allgemeinen besteht der erste Schritt darin, das Testcontainers-NuGet-Paket in Ihrem C#-Projekt zu installieren. Sie würden die NuGet Package Manager-Konsole öffnen und den folgenden Befehl ausführen:

 Install-Package Testcontainers


Wir benötigen jedoch die MongoDB-Variante dieses Pakets (ich verwende zum Zeitpunkt des Schreibens Version 3.8.0), die das Basispaket Testcontainers enthält. Sie können es über die Benutzeroberfläche des Paketmanagers oder mit diesem Befehl installieren:

 Install-Package Testcontainers.MonogoDB

2. Testcontainer für MongoDB konfigurieren

Nachdem Sie Testcontainers installiert haben, müssen Sie es für MongoDB konfigurieren. Dazu muss ein MongoDB-Container mit den erforderlichen Einstellungen eingerichtet werden. Hier ist ein Beispiel, wie Sie Testcontainer für MongoDB in C# konfigurieren können:

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


Im obigen Beispiel erstellen wir eine neue Instanz von MongoDbBuilder und geben das MongoDB-Image und die Portbindung an. Die WithImage Methode legt das Bild für den MongoDB-Container fest, sodass bei Verwendung von „mongo:latest“ immer das neueste Bild abgerufen wird.


Optional können wir die Portbindung verwenden, um explizit zu konfigurieren, welche Ports wir verwenden möchten:

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


Der obige Code verwendet WithPortBinding Methode, um den Port 27017 des Containers an den Port 1337 des Hostcomputers zu binden. In den kommenden Abschnitten werden wir sehen, dass Sie dies möglicherweise einfach so belassen können, es sei denn, Sie haben eine besondere Notwendigkeit, Ports zu binden. Wir können eine dynamische Verbindungszeichenfolge erhalten, was sehr praktisch ist!

3. Starten und Stoppen des MongoDB-Containers

Nachdem Sie Testcontainer für MongoDB konfiguriert haben, können Sie den Container nach Bedarf starten und stoppen. Hier sind Codebeispiele zum Starten und Stoppen des Containers:


So starten Sie den MongoDB-Container:

 await container.StartAsync();


So stoppen Sie den MongoDB-Container:

 await _container.StopAsync();


Denken Sie daran, dass der MongoDbContainer-Typ entsorgt werden kann. Rufen Sie also DisposeAsync auf, um die Daten zu bereinigen, wenn Sie dazu bereit sind.


Verwendung von C#-Testcontainern für MongoDB in der Praxis

Nachdem wir nun gesehen haben, wie man Container auf- und abreißt, stellt sich die Frage, was wir mit ihnen machen sollen. Wir haben viele Möglichkeiten, und wirklich, die Grenze liegt bei Ihrer eigenen Vorstellungskraft (und Zeit, Geld und anderen Ressourcen…)!


Die meisten Menschen nutzen C#-Testcontainer zum Schreiben von Integrations- oder Funktionstests . Sie können Testcontainer beispielsweise mit xUnit oder NUnit verknüpfen und Tests schreiben, die mit einer echten Datenbank interagieren.


Ich selbst musste C#-Testcontainer für MongoDB mit BenchmarkDotNet verbinden, damit ich das Einfügen von Datensätzen in MongoDB vergleichen konnte! Ein ähnlicher Anwendungsfall, bei dem ich vorübergehende lokale Datenbanken benötigte, jedoch nicht unbedingt für ein Test-Framework.


Unabhängig davon müssen wir in der Lage sein, von C# aus eine Verbindung zu diesen MongoDB-Datenbankcontainern herzustellen, und die nächsten Unterabschnitte werden dies behandeln.

Herstellen einer Verbindung zu C#-Testcontainern für MongoDB mit MongoDB.Driver

Nehmen wir an, Sie haben die vorherigen Abschnitte gelesen und das richtige MongoDB-Paket für Testcontainer installiert. Wenn Sie diesen Abschnitt überflogen haben, gehen Sie zurück, lesen Sie ihn und holen Sie sich das richtige Paket. Andernfalls rätseln Sie, warum Sie nicht die richtigen Abhängigkeiten finden können!


Sie müssen außerdem das MongoDB.Driver NuGet-Paket installieren. Dies ist es, was wir verwenden werden, um eine Verbindung zum Datenbankcontainer herzustellen, den wir erstellt haben. Ich habe weitere Artikel, die Sie lesen können, wenn Sie weitere Erklärungen zur Funktionsweise von MongoDB.Driver im Allgemeinen wünschen:


Wenn die richtigen Pakete einsatzbereit sind, können wir den Code, den wir zuvor gesehen haben, mit etwas MongoDB-Treibercode kombinieren, um alles zusammenzuhalten:

 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");


Im obigen Beispiel können wir GetConnectionString() für den neu gestarteten MongoDB-Container von Testcontainers aufrufen. Das Tolle daran ist, dass GetConnectionString() Ihnen, egal wie Sie Ihren Testcontainer für MongoDB mithilfe des Builder-Musters konfigurieren, das wir in diesem Code und weiter oben im Artikel sehen, alles liefert, was Sie zum Herstellen einer Verbindung benötigen.


Da MongoClient eine Verbindungszeichenfolge als einzelnes Argument akzeptiert, ist es trivial, Zugriff auf die MongoDB-Datenbank zu erhalten, um sofort damit zu arbeiten!

Durchführen von CRUD-Operationen auf dem MongoDB-Testcontainer

Nachdem wir nun unseren MongoDB-Testcontainer eingerichtet und einen MongoClient damit verbunden haben, können wir damit beginnen, CRUD-Operationen darauf auszuführen. Die von der Containerinstanz bereitgestellten Verbindungsdetails machten es zu einem Kinderspiel, diese beiden Dinge zu kombinieren, und wir können uns tatsächlich nur auf die MongoDB.Driver-Methodenaufrufe für CRUD konzentrieren.


Hier ist ein Beispiel für die Durchführung einer einfachen CRUD-Operation:

 // 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);


Mithilfe der vorherigen Codeausschnitte waren wir bereits mit unserer MongoDB-Containerinstanz und einem MongoClient einsatzbereit. Infolgedessen können Sie im obigen Codeausschnitt sehen, dass wir direkt mit unserer IMongoCollection<BsonDocument> arbeiten können, die wir aus der vorherigen Einrichtung erhalten haben.


Dies verdeutlicht, dass Sie, sobald Sie den MongoDB-Docker-Container über Testcontainer zum Laufen gebracht haben, keine besonderen Schritte mehr unternehmen müssen, sobald Sie eine Verbindung hergestellt haben!


Zusammenfassung der C#-Testcontainer für MongoDB

Zusammenfassend lässt sich sagen, dass C# Testcontainers für MongoDB eine unglaublich einfache Möglichkeit ist, einen vorübergehenden MongoDB-Datenspeicher für Ihre Tests und Entwicklung zum Laufen zu bringen. Obwohl sich dieser Artikel nicht auf bestimmte Anwendungsfälle konzentrierte, haben Sie hoffentlich ein besseres Verständnis dafür, wie transparent es sich anfühlt, einen MongoDB-Treiber über Testcontainern zu legen, um mit MongoDB zu interagieren.


Angesichts der Tatsache, dass C#-Testcontainer das Einrichten, Abbauen und sogar die Verwaltung von Verbindungszeichenfolgen vereinfacht, ist dies eine einfache Empfehlung von mir, wenn Sie MongoDB für die lokale Verwendung zum Laufen bringen möchten.


Wenn Sie dies nützlich fanden und nach weiteren Lernmöglichkeiten suchen, abonnieren Sie meinen kostenlosen wöchentlichen Software-Engineering-Newsletter und schauen Sie sich meine kostenlosen Videos auf YouTube an!


Auch hier veröffentlicht