Trong bài viết này, tôi sẽ hướng dẫn bạn C# Testcontainers cho MongoDB! Tôi thích sử dụng Testcontainers cho công việc cơ sở dữ liệu cục bộ khi tôi không muốn nghĩ đến việc quản lý chi phí xoay vòng và chia nhỏ cơ sở dữ liệu hoặc quản lý nội dung nào đó trên đám mây. MongoDB cũng không ngoại lệ ở đây vì gói C# Testcontainers NuGet mà chúng tôi có cho MongoDB là một niềm mơ ước được làm việc cùng.
Trong bài viết này, tôi sẽ giới thiệu cho bạn những kiến thức cơ bản về Testcontainers. Từ đó, tôi sẽ chứng minh việc tương tác với cơ sở dữ liệu mới tạo của bạn thông qua gói C# MongoDB.Driver NuGet đơn giản như thế nào — gần giống như bạn thậm chí sẽ không biết có một vùng chứa được tạo ra! Hãy đi sâu vào nó.
Testcontainers là một gói NuGet tuyệt vời có thể nâng cao đáng kể quy trình thử nghiệm và phát triển cục bộ của bạn khi xây dựng các ứng dụng .NET. Nó cung cấp một cách đơn giản và hiệu quả để quản lý các bộ chứa Docker, cho phép bạn tạo ra các phiên bản nhẹ và biệt lập rồi phá bỏ chúng như chưa từng có chuyện gì xảy ra!
Điều đó có nghĩa là với Testcontainers, bạn không còn phải lo lắng về việc thiết lập và chia nhỏ cơ sở dữ liệu thử nghiệm hay xử lý các tệp cấu hình phức tạp. Nó xử lý tất cả các chi tiết về quản lý vùng chứa, khiến quá trình này trở nên tầm thường — tôi chắc chắn sẽ không muốn xử lý việc này một cách thủ công.
Một số lợi ích chính của Testcontainer bao gồm:
Đối với bài viết này, chúng tôi sẽ tập trung vào cách chúng tôi có thể sử dụng C# Testcontainer cho MongoDB nói riêng. Phần lớn lời khuyên được đề cập ở đây sẽ có thể áp dụng cho các dịch vụ khác, đặc biệt là cơ sở dữ liệu, nhưng chúng tôi sẽ tập trung vào MongoDB.
Để bắt đầu với Testcontainers trong C#, bạn sẽ cần cài đặt và định cấu hình các phần phụ thuộc cần thiết trong dự án của mình. Thực hiện theo các bước bên dưới để thiết lập Testcontainer cho MongoDB trong C#.
Nói chung, bước đầu tiên là cài đặt gói NuGet Testcontainers trong dự án C# của bạn. Bạn sẽ mở Bảng điều khiển quản lý gói NuGet và chạy lệnh sau:
Install-Package Testcontainers
Tuy nhiên, chúng tôi cần hương vị MongoDB của gói này (tôi đang sử dụng phiên bản 3.8.0 tại thời điểm viết bài) bao gồm gói Testcontainers cơ bản. Bạn có thể cài đặt nó thông qua giao diện người dùng trình quản lý gói hoặc bằng lệnh này:
Install-Package Testcontainers.MonogoDB
Sau khi cài đặt Testcontainers, bạn cần định cấu hình nó cho MongoDB. Điều này liên quan đến việc thiết lập vùng chứa MongoDB với các cài đặt được yêu cầu. Dưới đây là ví dụ về cách bạn có thể định cấu hình Testcontainer cho MongoDB trong C#:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();
Trong ví dụ trên, chúng tôi tạo một phiên bản mới của MongoDbBuilder
và chỉ định liên kết cổng và hình ảnh MongoDB. Phương thức WithImage
đặt hình ảnh cho bộ chứa MongoDB, vì vậy việc sử dụng “mongo:latest” sẽ luôn lấy hình ảnh mới nhất.
Theo tùy chọn, chúng tôi có thể sử dụng liên kết cổng để định cấu hình cổng nào chúng tôi muốn sử dụng một cách rõ ràng:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();
Đoạn mã trên sử dụng phương thức WithPortBinding
liên kết cổng 27017 của vùng chứa với cổng 1337 của máy chủ. Chúng ta sẽ thấy trong các phần sắp tới rằng trừ khi bạn có nhu cầu cụ thể về liên kết các cổng, bạn có thể cứ để nguyên như vậy. Chúng ta có thể có được một chuỗi kết nối động, rất tiện lợi!
Sau khi định cấu hình Testcontainer cho MongoDB, bạn có thể khởi động và dừng vùng chứa nếu cần. Dưới đây là các ví dụ về mã để bắt đầu và dừng vùng chứa:
Để khởi động bộ chứa MongoDB:
await container.StartAsync();
Để dừng bộ chứa MongoDB:
await _container.StopAsync();
Hãy nhớ rằng loại MongoDbContainer có thể bị loại bỏ, vì vậy hãy gọi DisposeAsync
để dọn dẹp khi bạn sẵn sàng.
Bây giờ chúng ta đã biết cách xoay và xé các thùng chứa, chúng ta phải làm gì với chúng? Chúng tôi có rất nhiều lựa chọn và thực sự, giới hạn nằm ở trí tưởng tượng của bạn (và thời gian, tiền bạc và các nguồn lực khác…)!
Hầu hết mọi người tận dụng C# Testcontainer để viết các bài kiểm tra tích hợp hoặc chức năng . Ví dụ: bạn có thể kết hợp Testcontainer với xUnit hoặc NUnit và viết các bài kiểm tra tương tác với cơ sở dữ liệu thực.
Đối với tôi, tôi cần kết nối C# Testcontainers cho MongoDB lên BenchmarkDotNet để có thể đánh giá việc chèn bản ghi vào MongoDB ! Một trường hợp sử dụng tương tự trong đó tôi cần cơ sở dữ liệu cục bộ tạm thời nhưng không nhất thiết phải có khung kiểm tra.
Bất chấp điều đó, chúng ta cần có khả năng kết nối với các vùng chứa cơ sở dữ liệu MongoDB này từ C# và các phần phụ tiếp theo này sẽ đề cập đến vấn đề đó.
Giả sử bạn đã đọc các phần trước đó và đã cài đặt gói MongoDB chính xác cho Testcontainers. Nếu bạn lướt qua phần này, hãy quay lại, đọc nó và lấy gói phù hợp. Nếu không, bạn sẽ phải vò đầu bứt tai về lý do tại sao bạn không thể tìm được phần phụ thuộc phù hợp!
Bạn cũng cần cài đặt gói NuGet MongoDB.Driver. Đây là những gì chúng ta sẽ sử dụng để thiết lập kết nối tới vùng chứa cơ sở dữ liệu mà chúng ta đã tạo ra. Tôi có các bài viết khác mà bạn có thể đọc nếu muốn giải thích thêm về cách hoạt động của MongoDB.Driver nói chung:
Với các gói phù hợp đã sẵn sàng, chúng ta có thể kết hợp mã mà chúng ta đã thấy trước đó với một số mã trình điều khiển MongoDB để gắn kết mọi thứ lại với nhau:
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");
Trong ví dụ trên, chúng ta có thể gọi GetConnectionString()
trên vùng chứa MongoDB mới được tạo ra từ Testcontainers. Điều tuyệt vời về điều này là cho dù bạn định cấu hình Testcontainer cho MongoDB bằng cách sử dụng mẫu trình tạo mà chúng tôi thấy trong mã này và trước đó trong bài viết, GetConnectionString()
sẽ cung cấp cho bạn những gì bạn cần kết nối.
Vì MongoClient
lấy chuỗi kết nối làm đối số duy nhất nên việc truy cập vào cơ sở dữ liệu MongoDB để bắt đầu làm việc với nó ngay lập tức là điều bình thường!
Bây giờ chúng ta đã thiết lập xong MongoDB Testcontainer và có MongoClient
được kết nối với nó, chúng ta có thể bắt đầu thực hiện các thao tác CRUD trên đó. Các chi tiết kết nối được cung cấp bởi phiên bản vùng chứa giúp việc kết hợp hai thứ này trở nên dễ dàng và thực sự, chúng ta chỉ có thể tập trung vào các lệnh gọi phương thức MongoDB.Driver cho CRUD.
Đây là một ví dụ về việc thực hiện thao tác CRUD đơn giản:
// 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);
Bằng cách sử dụng các đoạn mã trước đó, chúng tôi đã thiết lập và chạy phiên bản vùng chứa MongoDB và MongoClient
. Do đó, bạn có thể thấy trong đoạn mã ở trên rằng chúng tôi có thể làm việc trực tiếp với IMongoCollection<BsonDocument>
mà chúng tôi đã thu được từ quá trình thiết lập trước đó.
Điều này giúp minh họa rằng khi bạn thiết lập và chạy bộ chứa docker MongoDB thông qua Testcontainers, bạn không cần phải xử lý mọi thứ theo bất kỳ cách đặc biệt nào sau khi kết nối với nó!
Để kết luận, C# Testcontainers cho MongoDB là một cách cực kỳ đơn giản để thiết lập và chạy kho lưu trữ dữ liệu MongoDB tạm thời cho quá trình thử nghiệm và phát triển của bạn. Mặc dù bài viết này không tập trung vào các trường hợp sử dụng cụ thể, nhưng hy vọng bạn hiểu rõ hơn về cảm giác minh bạch khi xếp lớp trình điều khiển MongoDB lên trên Testcontainers để tương tác với MongoDB.
Vì C# Testcontainers giúp bạn không phải đau đầu trong quá trình thiết lập, phân tích và thậm chí cả quản lý chuỗi kết nối, tôi khuyên bạn nên sử dụng dễ dàng nếu bạn muốn bắt đầu và chạy với MongoDB để sử dụng cục bộ.
Nếu bạn thấy điều này hữu ích và bạn đang tìm kiếm thêm cơ hội học tập, hãy cân nhắc đăng ký nhận bản tin kỹ thuật phần mềm miễn phí hàng tuần của tôi và xem các video miễn phí của tôi trên YouTube !
Cũng được xuất bản ở đây