Mongo2Go ile local Mongo Development ve Integration Test

Hasan Başaran
3 min readJan 2, 2021

--

<spoiler>Bu içerik; DI, .Net Core, MongoDB konuları için temel bilginizin var olduğu kabul edilerek oluşturulmuştur. Bu konularda bilginiz yok ise öncelikle bu konuları araştırmanızı önerir, iyi okumalar dilerim.</spoiler>

Öncelikle Entegrasyon (Integration) test nedir ve ne için kullanıyoruz ondan bahsedelim.

Günümüzde yazılımlar büyük bussiness’lara ve birbirine bağımlı yada bağımsız bir çok yapıya/modüle ev sahipliği yapmaktadır. Bu ölçüde karmaşıklık, farklı çözüm yolu arayışlarını ve yaklaşımları beraberinde getirmektedir. Tam olarak bu noktada entegrasyon(Integration) testi de bizim için, farklı modüllerin/yapıların bir araya geldiğinde stabil ve tutarlı sonuçlar elde edilebilmesini garanti altına almamızı sağlamaktadır.

Konu içeriğimiz şuan farklı olduğu için entegrasyon(Interation) test’i hakkında daha derinlere inmeyeceğim. Merak edenler buradan daha fazla bilgi edinebilir.

Gelelim Mongo2Go konusuna. Mongo2Go; local environment’da in-memory MongoDB ayağa kaldırmamızı sağlayan, workaround bir çözüm olarak tanımlanabilir. Üstelik bunlar için local’de bir MongoDB host etmemize, onun kurulum/ayar vb. problemleriyle de uğraşmanıza da gerek yok.

Peki Mongo2Go bizim ne işimize yarayacak? Hangi durumlarda kullanabiliriz yada hangi durumlarda işimizi kolaylaştırır?

  • Öncelikle bahsettiğimiz gibi local ortamda hızlıca MongoDB geliştirmelerini yapmak
  • Birim(Unit) Test,Entegrasyon (Integration) Test için izole ve geçici MongoDB ihtiyaçlarını karşılamak

Hızlıca nasıl Mongo2Go kullanırız inceliyelim. Ben örneklendirmelerimi .net core web api üzerinde gerçekleştireceğim, sizler kendinize göre yapıyı uygun hale getirebilirsiniz.

  1. NetCore web api proje oluşturuyoruz.
ASP.NET Core Web Application
Project Name & Location & Solution
API project

2. Mongo2Go paket kurulumu

Mongo2Go paketleri https://nuget.org/packages/Mongo2Go/ üzerinde yer almakta. Package manager console üzerinde aşağıdaki gibi yükleme yapabilir yada VS üzerinde Nuget Package Manager üzerinden search ile gerekli paketleri bulup indirebilirsiniz.

PM> Install-Package Mongo2Go

Sonrasında Mongo’ya erişebilmek için MongoDB.Driver ‘ı paketini indirmemiz gerekiyor. Şu şekilde kurulumu gerçekleştirebilirsiniz;

PM> Install-Package MongoDB.Driver 

3. Örnek Mongo Collection ve DI ile Collection erişimi

Basit anlamda bir collection oluşturuyoruz.

public class TestCollection{public string CollectionName { get; set; }public string CollectionDescription { get; set; }public decimal CollectionValue { get; set; }}

Sonrasında bir servis katmanı oluşturup collection erişimini ve işlemleri bunlar üzerinden gerçekleştirelim.

kullanımı hızlıca aktarabilmek için yukarıdaki gibi implementasyonu gerçekleştirdim. ConnectionString’i constructure da alırken, databasename ve collection name ‘i statik olarak geçtim(Sizler appsettings.json vb şekilde parametrik olarak tanımlayabilirsiniz).Gelin birazcık detaylara inelim;

ilk olarak;

internal MongoDbRunner _runner;

Mongo2go ‘yu bizim için ayağa kaldıracak olan runner objemiz. Detayını referans üzerinden izlerseniz zaten mongo2go üzerinde gelediğini kolayca görebilirsiniz.

internal IMongoCollection<TestCollection> _testCollection;

IMongoCollection MongoDB.Driver ile gelen ve collection yapımız için bize driver sağlayacak olan Interface’imiz.

Gelelim MongoDB ‘yi ayağa kaldırmaya ve client olarak connection’ı oluşturmaya.

_runner = MongoDbRunner.Start(singleNodeReplSet: false);MongoClient client = new MongoClient(connectionString);IMongoDatabase database = client.GetDatabase(_databaseName);_testCollection = database.GetCollection<TestCollection>(_collectionName);

4. DI ‘ile Servis’i inject edelim.

Bunun için startup.cs içinde yer alan ConfigureServices methodu içine

services.AddSingleton<IMongo2GoService>(service => new Mongo2GoService(“mongodb://127.0.0.1:27038/”));
startup.cs

şeklinde implementasyonunu gerçekleştiriyoruz. Bu adımda ConnectionString olarak vermiş olduğumuz port üzerinden MongoDB ayağa kalkacak. Yukarıdaki örnek için 27038 numaralı portta yer alacak.

Uygulamayı ayağa kaldırdığımızda örnek console çıktımız aşağıdaki gibi olacaktır;

Console Output

Bu adımdan sonra sizler in-memory olarak local mongodb geliştirmelerinizi gerçekleştirebilir yada Integration/Unit test adımlarınız için bu yapıyı kullanabilir, farklı yöntemlerle kendi uygulamalarınıza entegre edebilirsiniz.

Umarım sizler için faydalı bir içerik olmuştur.

Herkese saygılar, sevgiler, esenlikler

ve tabiki iyi kodlamalar…

Kaynak : https://github.com/Mongo2Go/Mongo2Go

--

--

Hasan Başaran
Hasan Başaran

Written by Hasan Başaran

Selçuk Üniversitesi Bilgisayar Mühendisliğinden mezun. Yazılım ve geliştirme metodolojileri üzerine uzmanlaşma çabasında bir mühendis.

No responses yet