Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: assert assertion baslamadan class? gerekiyor. kazandirarak mesaj object niteligi niteligini object olumsuz projenin public soluklu uzayini Mono ve .NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : Mono ve .NET
Yayınlanma Tarihi : 23.3.2005
Okunma Sayısı : 31799
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Mono' da NUnit Yardımıyla Kod Testi
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Günümüzde object modellemeye bu kadar önem verilmesi, bu kadar çok kullanılması bir çok insanın hatta bir çok şirketin uzun soluklu projeler geliştirmesine olanak sağladı. Uzun soluklu bir projenin ortasında yapılan bir hata tekrar projenin başa dönmesine sebeb olabilir. Buda maliyeti iki katına çıkarır ve zaman kaybına yol açar. Bu yüzden günümüz modellemesinde yazılım geliştirmeyle test aşaması beraber yürütülerek zaman ve maliyet kazancı sağlanmaya çalışılıyor. Yazılımdaki yapılanmada kontrol etmediğimiz sınıfa hasta sınıf diyelim. Hasta sınıfımız tedavi olmadan yazılımın içine girerse hastalığını diğer sınıflara bulaştıracaktır. Buda yazılımımızın ölümcül bir tehlikeyle karşı karşıya kaldığını gösterir. Bu yüzden hasta bir sınıf varsa bir doktora götürmeliyiz. Doktorumuz NUnit, yaptığı testler sonucu bize bir reçete verir. Reçetedeki ilaçlar ise hatalı kodların düzeltilmesidir. Hasta sınıfın hastalığı geçmeden yazılıma sokmazsak, hastalık daha başındayken ölümü önleriz.Yani her adımı test ederek gitmeliyiz. 

Piyasadaki bir çok programda çeşitli sebeblerden dolayı hatalar oluşabiliyor. Bunlara terimsel olarak programın bug’ ları deniyor.Bug’ ları gidermek için çeşitli programların, bug’ lı programa fixlenmesi gerekiyor. Fix’ leme terimiyle yapılan iş kısaca hatalı.dll’ lerin alınıp düzeltilmiş .dll’ lerle yerdeğiştirmesi. C#’ta Dll’ lerin test edilmesi için Java’ da kullanılan JNuit(Java Unit testing Framework)’ in bir türevi olan NUnit yaratılmıştır. NUnit C# kodlarının NUnit attribues’ larına bakarak bir hata olup olmadığına karar verir. Oluşan hataları ekrana yazar ve testreport.xml adı altında bir rapor yaratır. Bu raporda teste tabii tutulan foksiyonların hata verip vermediği ile ilgili bilgiler ortaya çıkar.Test edeceğimiz programda NUnit.Framework’ün sınıflarını kullanacağımız için; nunit-framework.dll’ ini programımıza referans olarak belirterek derlememiz gerekiyor. Aslında NUnit yapısına bakarsak 3 katmanlı yapıda 2.katmanda sıklıkla kullanılacak olan bir yapı. NUnit-console.exe default olarak mono-1.0 ve üstü versiyonlarla geliyor.

NUnit’te test aşaması attributes(niteliklerin) mantığı üzerine dayalı. Mesela bir class’ ın test edildiğini belirtmek için [TestFixture] niteliğini belirtmemiz gerekiyor. Aynı şekilde class’ ın içinde bulunan bir fonksiyonunda nasıl bir test özelliğine tabi tutulacağını belirtmemiz gerekiyor. Mesela [Test] niteliğini kazandırarak yada [Ignore] niteliğini kazandırarak ileride oluşacak hataların önüne geçmiş oluruz yani hata varsa vardır tabii ama ileride test aşamasında yakaladığımız zaman programımızın bug’ larıda o kadar az olur. Aşadaki örneğimizi incelersek;

//test1.cs using System;
using NUnit.Framework;

[TestFixture]
public class testsinif
{
     [Test]
     public void deneme()
      {
        int sayi1=5;
        int sayi2=6;
        Assertion.Assert("sayi1!=sayi2",sayi1==sayi2);
     }
}
 
Bu programı bir kütüphane olarak derlememiz gerekiyor. Çünkü NUnit ile sadece .dll dosyaların testlerini gerçekleştirebiliyoruz. nunit.framework.dll’ in aynı dizinde olduğundan emin olun (GAC’ye yüklemediyseniz tabii.)

Uyari: NUnit ile sadece .dll’foksiyonlar teste tabi tutulabilirler.

C:\mcs -target:library -r:nunit.framework.dll test.cs

C:\nunit-console test.dll
Programda bilerek bir hata yaptık ve testimizin başarısız olması gerekiyor.bakalım nasıl olmuş...



Programımızı satır satır incelersek, ilk olarak NUnit.Framework isim uzayını kullanacağımızı belirttik. Daha sonra ise class’ ımıza [TestFixture] niteliğini kazandırarak NUnit programına bir class’ ın test edileceğini belirtiyoruz. Daha sonra deneme() methoduna bir test uygulanacağını belirten niteliği yani [Test] niteliğini kazandırıyoruz. Eğerki biz fonksiyonumuza bu niteliği kazandırmazsak, NUnit’ te herhangi bir test işlemine uygulanmadan geçecektir. deneme methoduna bakarsak iki sayiya belirli değerler verilmiş. NUnit.Framework kütüphanesinin bir class’ ı olan Assertion ile yapacağımız testi daha spesifik hale getirebiliriz. Assertion ingilizcede "bildiri" demek, Assert ise "bildiri bildirmek" demek olduğuna göre geriye belirli bir koşul gerçekleşmiyorsa bir hata dönecektir.

Assertion.Assert(string rapordakimesaj,bool kosul);

Assertion.Assert(bool kosul);

Eger ki Assert’ teki koşul parametresinin değeri false ise geriye önündeki string’ i geri döndürür ve rapora ilave eder. NUnit yaptığı işten sonra bulunan test sonuçlarını .xml formatındaki bir rapor dosyasında saklamaktadır.



NUnit.Frameworkun niteliklerine bakarsak;

Assert sınıfı;

NUnit.Framework isim uzayını Assert sınıfının  Methodları:
Assert.AreEqual(object olası,object olay);
Assert.AreSame(object olası,object olay);
Assert.Fail();// testin fail olduğunu belirtmek için kullanılır.
Assert.IsFalse(bool cevap);//cevap eğer false ise test olumsuz sonuçlanır.
Assert.IsTrue(bool cevap);//cevap eğer true ise test olumsuzdur.
Assert.IsNull(object o);//eğer o=null ise test olumsuz sonuçlanır.
Assert.IsNotNull(object o);//eğer o!=null ise test olumsuz sonuçlanır
Assert.ReferanceEquals(object o1,object o2);//o1 ile o2’nin referansları eşit ise test olumsuz sonuçlanır.
Assertion Sınıfı: Aslında assert sınıflarının toplandığı büyük bir duyuru sınıfıdır. Aradaki ilişki DataTable ile DataSet arasındakine ilişkiye benzetilebilir.

NUnit.Framework isim uzayını Assertion sınıfının özellikleri ve Methodları
Assertion.Assert(bool olay);  //olay false ise test olumsuzdur.(yani olaydan kastım sayi1= =sayi2 gibi
Assertion.AssertEquals(string mesaj,object gerekliolay,object olay);
Assertion.AssertNotNull(string  mesaj,object kontroledilenobje);
Assertion.AssertNull(string mesaj,object kontroledilenobje);
Assertion.AssertSame(string mesaj,object gerekliolay,object olay);
Assertion.Fail(string mesaj);// test fail olduğu zaman yazıcak yazı.(artık ne yazarsınız bilmem..:))
Nitelikler:

Nitelik İsmi: Kazandırdığı nitelik
[Setup] setup niteliği teste başlamadan önce yapılacak ayarları yapar.
[TearDown] teste zarar verecek dataları temizleme niteliği kazandırır.
[Test] fonksiyonun teste tabi tutulacağını belirleyen nitelik.
[TestFixture] classın teste tabii tutulacağı niteliği belirler.
[TestFixtureSetUp] classın teste başlamadan önceki ayarlarını yaptıran nitelik.
[TestFixtureTearDown] classın teste başlamadan önceki zarar verici dataları temizler.
[ExpectedException] Açıklanmış hataları kazandıra nitelik
[Ignore(string mesaj)] bu niteliği kazanmış method teste’te önemsenmez.
Yukarıda anlattığımız nitelikleri ve bazı sınıfları örnekle açıklayalım;

//anatest.cs using System;
using NUnit.Framework;

[TestFixture]
public class testsinif
{
       int sayi1,sayi2;

       [SetUp]
       public void setup()
       {
          sayi1=5;
          sayi2=0;
       }
       [Test]
       public void esitlermi()
       {
          Assert.AreEqual("sayi1!=sayi2 olmadigi icin hata verdi",sayi1==sayi2);
       }

       [Test]
       public void nesnebosmu()
       {
         object o="caner";
         Assert.IsNull(o);
       }

       [Test]
      public void fail()
       {
         Assert.Fail("Test basarisiz sonuclandi");
       }

       [Test]
       [Ignore("Notest fonksiyonu teste tabii tutulmadi")]
       public void notest()
        {
          Assert.AreEqual("sayi1==sayi2’mi testine tabii tutulmadi",sayi1==sayi2);
        }
}

mcs -target:library -r:nunit.framework.dll anatest.cs nunit-console anatest.dll


Artık program yazarken test edebileceğimiz durumlarıda göz önünde tutmak gerektiğinin ne kadar yerinde bir davranış olduğu birkez daha ortaya çıkmış oldu.

programdaki kodlar için

Bir sonraki yazılarda görüşmek üzere.

Caner ŞAHAN

Kaynaklar:

www.nunit.org

www.junit.org

http://msdn.microsoft.com/msdnmag/issues/04/04/default.aspx

http://www.microsoft.com/MSPress/books/6778.asp

Makale:
Mono' da NUnit Yardımıyla Kod Testi Mono - Linux'ta .NET Caner Şahan
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor