3 Haziran 2010 Perşembe

VS 2010 'da Test Driven Development


Bir önceki yazımda Test Driven Development’ın ne olduğunu anlatmaya çalıştım.Şimdi de Visual Studio 2010 ile Test Driven Development çalışması üzerine kısa bir örnek yapmaya çalışalım,böylece TDD’nin ne olduğu daha iyi anlaşılacaktır.

Öncelikle yapacağımız çalışmadan kısaca bahsedeyim.Dosyadan okuma yaptığımız bir uygulama düşünelim ve bu uygulamayı TDD tekniği ile geliştireceğiz.Böylece TDD tekniğini uyguladıktan sonra daha kaliteli bir kod yapısına sahip olduğumuzu göreceğiz.

Bunun için öncelikle VS 2010’u açıp yeni bir ConsoleApplication(C#) oluşturalım ve bu burada beklesin.Ardından Solution Explorer’dan New Project’i seçip yeni “Test Project” (C#)oluşturuyoruz.Bu işlemlerin ardından Solution Explorer ‘da iki projemiz yer alıyor;




Şimdi Dosya_Okuma_Test projemizde sağ tuş> Add >Class diyerek ” DosyaOkumaTestleri.cs” adında bir sınıf oluşturalım ve yavaş yavaş test sınıfımızı tasarlamaya başlayalım.

İlk işlemimiz oluşturmuş olduğumuz sınıfa attribute olarak [TestClass] belirtiyoruz.Fakat referansımızı eklemeden bu işlemi yaparsak hata verecektir.O halde Dosya_Okuma_Test projemizde References>Sağ tuş>Add_Reference' NET sekmesinden Microsoft.VisualStudio.QualityTools.UnitTestFramework u referans olarak projemize ekliyoruz.Ardından sınıfımıza using Microsoft.VisualStudio.TestTools.UnitTesting; ekliyoruz ve artık test attribute lerini projemizde sorunsuz kullanabiliriz.

Artık sınıfımızda test metodlarımızı oluşturmaya başlayabiliriz.İlk metodumuz ile okunacak olan dosyanın

yolunun belirtilip belirtilmediğini kontrol edecek metodumuzu hazırlamaya başlayalım.



Gördüğümüz gibi metodumuzu oluşturup DosyaIslemleri sınıfından nesne oluşturmaya çalıştığımızda hata verecektir burada alt+shift+f10 basarak Generate Class for “DosyaIslemleri” diyoruz.(Buradaki “C:\” parametresinden aşağıda bahsedeceğim)Bu islemin ardından uygulamamizda DosyaIslemleri.cs sınıfının oluşturulmuş olduğunu göreceksiniz.Bu işlemin ardından Assert işlemini yapıyoruz;


Burada DosyaYolu’nu Generate ediyoruz.Böylece test kodumuzu yazmış olduk şimdi projemizde Run All Tests (Ctrl+R A) ve “fail” olalım.


Böylece TDD’nin 1.aşamasını tamamlamış olduk.(RED) .Şimdi 2.aşamaya geçelim yani test kodumuzu hatadan kurtaralım.Bu işlemeden önce generate etmiş olduğumuz DosyaIslemleri.cs sınıfımızı aşağıdaki gibi düzenleyelim;

class DosyaIslemleri

{

private string _dosya_yolu;

public DosyaIslemleri(string dosyaYolu)

{

_dosya_yolu = dosyaYolu;

}

public string DosyaYolu

{

get

{

return _dosya_yolu;

}

}

}

Ve şimdi test projemizdeki testi yeniden çalıştıralım(CTRL+R A) ve sonuca bakalım;



Gördüğümüz gibi test işleminden başarıyla geçildi.Böylece 2.aaşamayıda tamamlamış olduk.(Green).

3.Aşamasında kodumuzu kaliteliştirmek için istediğiniz gibi düzenlemeler yapabilirsiniz.Örnek verecek olursak yukarda DosyaIslemleri.cs 'de parametre düzenlemesi yapabilriz yada Property'lerde düzenlemeler yapabiliriz bu sizin kod geliştirme şeklinize Bu aşadama Refactor aşamasıdır.

Bu işlemlerinin benzerleri aşağıdaki herbir TestMethod’u için yapıyoruz ve her biri için Passed oluyoruz.Sonuç olarak test sınıfımız ve dosyaIslemleri sınıfımız;

namespace Dosya_Okuma_Test

{

[TestClass]

public class DosyaOkumaTestleri

{

[TestMethod]

public void DosyaYoluBelirtilmesi()

{

DosyaIslemleri dosis = new DosyaIslemleri(@"C:\");

Assert.IsFalse(String.IsNullOrEmpty(dosis.DosyaYolu));

}

[TestMethod]

public void DosyaOkunmasi()

{

DosyaIslemleri dosis = new DosyaIslemleri(@"C:\");

dosis.Okuma();

Assert.IsTrue(dosis.Okunuyor);

}

[TestMethod]

public void DosyaKapandiMi()

{

DosyaIslemleri dosis = new DosyaIslemleri(@"C:\");

dosis.Kapat();

Assert.IsTrue(dosis.Kapali);

}

}

}

namespace Dosya_Okuma_Test

{

class DosyaIslemleri

{

private string _dosya_yolu;

public DosyaIslemleri(string dosyaYolu)

{

_dosya_yolu = dosyaYolu;

}

public string DosyaYolu

{

get

{

return _dosya_yolu;

}

}

internal void Okuma()

{

//okuma işlemi için gerekli kodlar yazılır..

Okunuyor = true;

}

public bool Okunuyor { get; set; }

internal void Kapat()

{

//kapatma işlemi için gerekli kodlar yazılır..

Kapali = true;

}

public bool Kapali { get; set; }

}

}

Dosya okuma işleminde dosya yolunun belirtilmesi,okuma ve kapatma işlemleri Test Driven Development tekniği ile oluşturuldu.

Şimdiki işlem DosyaIslemleri.cs sınıfını başlangıçta oluşturduğumuz console uygulamasi Dosya_Okuma içerisine kesip-yapıştırıyoruz ve gerekli kodları bu sınıfın içerisine yazıyoruz.(Gerekli kodlar Orn:okuma() metoduna okuma yapmasi için gerekli C# kodlarının yazılması.)

Böylece derli toplu bir şekilde ve nesne yönelimli mimariye uygun bir biçimde kod yapımızı Test Driven Development tekniği ile oluşturmuş olduk.Bu tekniği uygulayıp geliştirmiş olduğumuz bu kodlarda daha sonra düzenleme yapmamız kolay olacaktır ve anlaşılabilirliği kolay.Böylece yazılımımız test edecek test mühendislerinin de işini kolaylaştırmış olduk.Ayrıca nesne yönelimli bir yapıda oluşturulmuş oldu.Umarım faydalı olmuştur.

0 yorum:

 

Mustafa Kaya. Copyright 2009 All Rights Reserved Revolution Two Church theme by Brian Gardner Blog Skins