Bu makalede MongoDB için C# Testcontainer'ları konusunda size rehberlik edeceğim! Bir veritabanını açıp kapatmanın getirdiği ek yükü yönetmeyi veya buluttaki bir şeyi yönetmeyi düşünmek istemediğimde, yerel veritabanı çalışmaları için Testcontainers'ı kullanmayı seviyorum. MongoDB için sahip olduğumuz C# Testcontainers NuGet paketi birlikte çalışmak için bir rüya olduğundan MongoDB burada bir istisna değildir.
Bu yazıda size Testcontainers'ın temellerini tanıtacağım. Oradan, C# MongoDB.Driver NuGet paketi aracılığıyla yeni oluşturulan veritabanınızla etkileşim kurmanın ne kadar basit olduğunu göstereceğim; neredeyse bir konteynerin oluşturulduğunu bile bilmiyormuşsunuz gibi! Hadi derinlemesine inceleyelim.
Testcontainers, .NET uygulamaları oluştururken test ve yerel geliştirme iş akışınızı büyük ölçüde geliştirebilecek harika bir NuGet paketidir. Docker konteynerlerini yönetmenin basit ve etkili bir yolunu sunarak hafif ve izole edilmiş örnekleri hızlandırmanıza ve hiçbir şey olmamış gibi yıkılmalarına olanak tanır!
Bu, Testcontainers ile artık test veritabanlarını kurma ve kaldırma veya karmaşık yapılandırma dosyalarıyla uğraşma konusunda endişelenmenize gerek olmadığı anlamına gelir. Konteyner yönetiminin tüm ayrıntılarını ele alıyor, bu da bu süreci önemsiz hissettiriyor - kesinlikle bunu manuel olarak halletmek istemem.
Testcontainers'ın temel faydalarından bazıları şunlardır:
Bu yazıda özellikle MongoDB için C# Testcontainer'ları nasıl kullanabileceğimize odaklanacağız. Burada ele alınan tavsiyelerin çoğu diğer hizmetlere, özellikle de veritabanlarına uygulanabilir ancak biz gözümüzü MongoDB'ye dikmeye devam edeceğiz.
C#'ta Testcontainers'ı kullanmaya başlamak için projenizde gerekli bağımlılıkları kurmanız ve yapılandırmanız gerekir. C#'ta MongoDB için Testcontainer'ları ayarlamak için aşağıdaki adımları izleyin.
Genellikle ilk adım Testcontainers NuGet paketini C# projenize yüklemek olacaktır. NuGet Paket Yönetici Konsolu'nu açıp aşağıdaki komutu çalıştırırsınız:
Install-Package Testcontainers
Ancak, temel Testcontainers paketini içeren bu paketin MongoDB versiyonuna ihtiyacımız var (bu yazının yazıldığı sırada 3.8.0 sürümünü kullanıyorum). Paket yöneticisi kullanıcı arayüzü aracılığıyla veya şu komutla kurabilirsiniz:
Install-Package Testcontainers.MonogoDB
Testcontainers'ı yükledikten sonra MongoDB için yapılandırmanız gerekir. Bu, gerekli ayarlara sahip bir MongoDB konteynerinin kurulmasını içerir. C#'ta MongoDB için Testcontainers'ı nasıl yapılandırabileceğinize dair bir örnek:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();
Yukarıdaki örnekte MongoDbBuilder
yeni bir örneğini oluşturuyoruz ve MongoDB imajını ve port bağlamasını belirliyoruz. WithImage
yöntemi, MongoDB kapsayıcısının görüntüsünü ayarlar; dolayısıyla "mongo:latest" kullanılması her zaman en son görüntüyü çeker.
İsteğe bağlı olarak, hangi bağlantı noktalarını açıkça kullanmak istediğimizi yapılandırmak için bağlantı noktası bağlamayı kullanabiliriz:
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();
Yukarıdaki kod, WithPortBinding
yöntemini kullanır ve konteynerin 27017 numaralı bağlantı noktasını ana makinenin 1337 numaralı bağlantı noktasına bağlar. Önümüzdeki bölümlerde, bağlantı noktalarını bağlamaya özel bir ihtiyacınız olmadığı sürece, muhtemelen bunu olduğu gibi bırakabileceğinizi göreceğiz. Dinamik bir bağlantı dizisi elde edebiliriz ki bu çok kullanışlıdır!
MongoDB için Testcontainers'ı yapılandırdıktan sonra, konteyneri gerektiği gibi başlatabilir ve durdurabilirsiniz. Kabı başlatmak ve durdurmak için kod örnekleri aşağıda verilmiştir:
MongoDB kapsayıcısını başlatmak için:
await container.StartAsync();
MongoDB kapsayıcısını durdurmak için:
await _container.StopAsync();
MongoDbContainer türünün atılabileceğini unutmayın; hazır olduğunuzda temizlemek için DisposeAsync
arayın.
Artık konteynerleri nasıl döndürüp parçalayacağımızı gördüğümüze göre, onlarla ne yapmamız gerekiyor? Pek çok seçeneğimiz var ve gerçekten sınır sizin hayal gücünüzdür (ve zaman, para ve diğer kaynaklar…)!
Çoğu kişi, entegrasyon veya işlevsel testler yazmak için C# Test kapsayıcılarından yararlanır. Örneğin Testcontainers'ı xUnit veya NUnit ile eşleştirebilir ve gerçek bir veritabanıyla etkileşime giren testler yazabilirsiniz.
Benim için MongoDB'ye kayıt eklemeyi kıyaslayabilmek için MongoDB için C# Testcontainers'ı BenchmarkDotNet'e bağlamam gerekiyordu! Geçici yerel veritabanlarına ihtiyaç duyduğum ancak mutlaka bir test çerçevesi için gerekli olmadığı benzer bir kullanım durumu.
Ne olursa olsun, bu MongoDB veritabanı kapsayıcılarına C# üzerinden bağlanabilmemiz gerekiyor ve sonraki alt bölümlerde bu konu ele alınacak.
Önceki bölümleri okuduğunuzu ve Testcontainers için doğru MongoDB paketinin kurulu olduğunu varsayalım. Bu bölüme göz attıysanız geri dönün, okuyun ve doğru paketi alın. Aksi halde neden doğru bağımlılıkları bulamadığınız konusunda kafanızı kaşıyacaksınız!
Ayrıca MongoDB.Driver NuGet paketini de kurmanız gerekir. Bu, oluşturduğumuz veritabanı kapsayıcısına bağlantı kurmak için kullanacağımız şey. MongoDB.Driver'ın genel olarak nasıl çalıştığı hakkında daha fazla açıklama istiyorsanız okuyabileceğiniz başka makalelerim var:
Doğru paketler hazır olduğunda, daha önce gördüğümüz kodu bazı MongoDB sürücü kodlarıyla birleştirip işleri birbirine yapıştırabiliriz:
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");
Yukarıdaki örnekte, Testcontainers'tan yeni oluşturulan MongoDB kapsayıcısında GetConnectionString()
çağırabiliriz. Bunun harika yanı, bu kodda ve makalenin başlarında gördüğümüz oluşturucu modelini kullanarak MongoDB için Testcontainer'ınızı nasıl yapılandırırsanız yapılandırın, GetConnectionString()
size bağlanmak için ihtiyacınız olanı sağlayacaktır.
MongoClient
bir bağlantı dizesini tek bir argüman olarak aldığından, MongoDB veritabanına erişim sağlayarak onunla hemen çalışmaya başlamak çok kolaydır!
Artık MongoDB Testcontainer kurulumumuzu yaptığımıza ve ona MongoClient
bağladığımıza göre, üzerinde CRUD işlemleri yapmaya başlayabiliriz. Konteyner örneğinin sağladığı bağlantı ayrıntıları bu iki şeyi birleştirmeyi çocuk oyuncağı haline getirdi ve aslında CRUD için yalnızca MongoDB.Driver yöntemi çağrılarına odaklanabiliyoruz.
Basit bir CRUD işlemi gerçekleştirmenin bir örneğini burada bulabilirsiniz:
// 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);
Önceki kod parçacıklarını kullanarak MongoDB konteyner örneğimiz ve MongoClient
ile zaten çalışır durumdaydık. Sonuç olarak yukarıdaki kod parçasında önceki kurulumdan elde ettiğimiz IMongoCollection<BsonDocument>
ile doğrudan çalışabildiğimizi görebilirsiniz.
Bu, MongoDB docker konteynerini Testcontainers aracılığıyla çalışır duruma getirdiğinizde, ona bağlandıktan sonra işleri herhangi bir özel şekilde ele almanıza gerek olmadığını göstermeye yardımcı olur!
Sonuç olarak, MongoDB için C# Testcontainers, testleriniz ve geliştirmeleriniz için geçici bir MongoDB veri deposunu çalışır hale getirmenin inanılmaz derecede basit bir yoludur. Bu makale belirli kullanım örneklerine odaklanmamış olsa da, MongoDB ile etkileşim kurmak için bir MongoDB sürücüsünü Testcontainer'ların üzerine katmanın ne kadar şeffaf olduğunu daha iyi anladığınızı umuyoruz.
C# Testcontainers'ın kurulum, sökme ve hatta bağlantı dizesi yönetimindeki baş ağrısını ortadan kaldırdığı göz önüne alındığında, yerel kullanım için MongoDB'yi kurup çalıştırmak istiyorsanız bu benim için kolay bir öneridir.
Bunu yararlı bulduysanız ve daha fazla öğrenme fırsatı arıyorsanız, haftalık ücretsiz yazılım mühendisliği bültenime abone olmayı ve YouTube'daki ücretsiz videolarıma göz atmayı düşünün!
Burada da yayınlandı