paint-brush
MongoDB için C# Testcontainer'larını Kullanarak Yerel Veritabanlarını Kolayca Çalıştırınile@devleader
190 okumalar

MongoDB için C# Testcontainer'larını Kullanarak Yerel Veritabanlarını Kolayca Çalıştırın

ile Dev Leader7m2024/04/02
Read on Terminal Reader

Çok uzun; Okumak

Bu makalede 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.
featured image - MongoDB için C# Testcontainer'larını Kullanarak Yerel Veritabanlarını Kolayca Çalıştırın
Dev Leader HackerNoon profile picture
0-item

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.


C# Test kapsayıcılarına genel bakış

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:

  • Tutarlı ve tekrarlanabilir bir test ortamı sağlama yeteneği. İhtiyaç duyduğunuz tam hizmet sürümünü ve yapılandırmayı tanımlayarak test sonuçlarınızın farklı ortamlarda güvenilir ve tutarlı olmasını sağlayabilirsiniz.


  • Test ve geliştirme iş akışınıza getirdiği hız ve esneklik. Hafif Docker konteynerlerini kullanarak, talep üzerine test ortamlarını hızlı bir şekilde çalıştırabilir ve kapatabilirsiniz. Bulutu veya paylaşılan kaynakları önceden yapılandırmaya gerek yok… Sadece anında muhteşemlik.


  • DotNet ekosistemindeki Xunit, NUnit ve BenchmarkDotNet gibi mevcut test çerçeveleri ve araçlarıyla sorunsuz entegrasyon. Bu, kapsayıcıya alınmış hizmet örneklerini herhangi bir büyük değişiklik yapmadan mevcut test paketlerinize kolayca dahil etmenize olanak tanı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 Test kapsayıcılarını ayarlama

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.

1. Test kapsayıcılarının kurulumu

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

2. MongoDB için Testcontainer'ları Yapılandırma

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!

3. MongoDB Konteynerini Başlatma ve Durdurma

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.


Uygulamada MongoDB için C# Test kapsayıcılarını kullanma

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.

MongoDB.Driver ile MongoDB için C# Testcontainers'a bağlanma

Ö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!

MongoDB Testcontainer Üzerinde CRUD İşlemlerinin Gerçekleştirilmesi

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!


MongoDB için C# Test Container'larını Tamamlama

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ı