May 06, 2010

Birim testlerin önemini artık duymayan kalmadı. :D D'de nasıl kullanıldıkları şurada var:

http://ddili.org/ders/d/birim_testler.html

Bunun bir üstü, testleri de test etmek... Çünkü testler, programın bütün satırlarını kapsayacak kadar geniş olmayabilirler. Bu, kod kapsamına (code coverage) bakarak anlaşılıyor.

Program -cov ile derleniyor:

dmd -cov -unittest -w deneme.d

Ondan sonra çalıştırılıyor:

/deneme

Sonunda deneme.lst diye bir dosya oluşuyor. O dosya, hangi satırın kaç kere işletildiğini gösteriyor.

Örnek:

import std.stdio;

int birHesap(int sayı)
{
   int sonuç = 2 * sayı;

   // Tek sayılarda 7 daha eklenmeli
   if (sayı % 2) {
       sonuç += 7;
   }

   return sonuç;
}

unittest
{
   assert(birHesap(42) == 84);
}

void main()
{}

Programı çalıştırdıktan sonra oluşan deneme.lst dosyası şöyle:

      |import std.stdio;
      |
      |int birHesap(int sayı)
      |{
     1|    int sonuç = 2 * sayı;
      |
      |    // Tek sayılarda 7 daha eklenmeli
     1|    if (sayı % 2) {
0000000|        sonuç += 7;
      |    }
      |
     1|    return sonuç;
      |}
      |
      |unittest
      |{
     1|    assert(birHesap(42) == 84);
      |}
      |
      |void main()
      |{}
deneme.d is 80% covered

Başında 0000000 olan satırlar hiç çalışmamış (yani denenememiş) olan satırları gösteriyorlar. O yüzden de bu programın yalnızca %80'inin kapsandığı bildiriliyor. (Diğer sayılar her satırın kaç kere işletildiğini gösteriyor.)

Test kapsamını arttırmak için bu durumda şu da eklenebilir:

   assert(birHesap(3) == 13);

Artık %100...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]