Moq İle Unit Test

Merhaba Arkadaşlar,

Bu yazımızda Moq kullanarak “yapay” unit test yazımına göz atacağız. Öncelikle “mocking” ve “moq” kavramlarını açıklamakta fayda var.

Nesne yönelimli programlamad mock nesneler  yani diğer adıyla sahte nesneler, gerçekte var olan nesnelerimizin davranışlarını taklit eden nesnelerdir. Gerçek nesnelerimiz gibi oluşturulup test senaryolarında buna göre hareket ederler, ve bu nesneler genel olarak Unit Testlerde kullanılır.

Aklımıza gelen ilk sorulardan bir tanesi neden bu yapılara ihtiyaç duyarız. Bunun cevabı ise aşağıdaki gibi kullanım amaçları olmasıdır.

  • Belirgin olmayan sonuçlar üreten operasyonlar (güncel hava durumu, saat gibi)
  • Oluşturulmasının veya çoğaltılmasının kolay olmadığı nesneler
  • Yavaşlık sorunu (her bir ünit testin veritabanına bağlanıp işlemler yapması ve sonuç beklemesi gibi)
  • Hali hazırda oluşturulmamış fonksiyonlar ve işlevellikler

Bu gibi sebeplerden ötürü “mocking” kavramını kullanmak önem kazanmaktadır.

Moq Nedir?

Moq ise bir .Net mocking kütüphanesidir. Moq’un temel amaçları basit kullanım ve en az gereksinimle kodları test etme ortamının sağlanmasıdır.

Kurulumu

Moq’ın kurulumu için bir kaç yöntem bulunuyor. (Sitesinden indirip projemize referans vermek ve ya NuGet Managerdan indirmek)

Biz NuGet Manager’dan inidirp kurma yoluna gideceğiz.(Kurulumun detaylarını anlatma gereği duymuyorum zaten Moq diye aratıp Install demeniz yeterli olacaktır)

Kullanım ve Test Ortamı

Bu ayarlamalardan sonra Moq’ı kullanarak örnek bie senaryo üzerinde unit testlerimizi yazalım. Aşağıdaki örnekte olduğu gibi bir CustomerService’imiz olduğunu  ve temsili olarak ICustomerRepository’deki  GetCustomer metodumuzun var olduğunu farzedelim.

Görüldüğü  üzere GetCustomer metodu veritabanına bağlanıp ilgili müşteri id ile Customer objectini bize veriyor.

Basit Bir Test

İlk testimizde öncelikle “ICustomerRepository” interface’imizi mocklayıp sahte olarak expectationlarımızı (girdiğimiz değerler ve gelmesi beklenen değerler) kuracağız.

Bu işlemler  sırasında ICustomerRepository interfacedeki GetCustomer meotodu bizim verdiğimiz değerlerle set edilirken Moq arka tarafta o metodu aşağıdaki gibi implement etmektedir.

Sonuç

Bu yazımızda Mocking frameworklerden birisi olan Moq’ı kullanarak basit bir test senaryasonu inceledik ve unit test işlemlerindeki faydalarından bahsettik.

Başka bir yazıda görüşmek üzere.

Yorum ( 1 )
  1. Onur
    20 Temmuz 2016 at 16:30
    Cevapla

    Elinize saglık 🙂

Bir cevap bırakın
Son Yazılar