18.Birim Testi Kavramı

Birim testleri uygulama geliştirme sürecinde yazılmış metod veya sınıfların test edilmesi anlamında kullanılan bir kavramdır. Birim testleri diğer testlerle karıştırılmamalıdır, diğer testler farklı zamanlarda yapılan testlerdir, birim testleri ise uygulama geliştirme sürecinde ara ara yapılan ve modül modül yapılan testlerdir. Birden çok araç olmasına karşın Java'da JUnit isimli bir API kullanılmaktadır. Bu API standart değildir, ancak neredeyse standart olma eğilimindedir. Burada JUnit API sisteminin temel noktaları ele alınacaktır. JUnit'in en önemli sınıfı Assert isimli sınıftır. (assert tr. iddia etmek) Assert sınıfı assertXXX static fonksiyonlarından oluşan bir sınıftır. JUnit API'si kullanmak için notların yazıldığı tarih itibari ile 4.12 versiyonu kullanılmaktadır. JUnit'e ilişkin detaylar JUnit org sitesindesinden incelenebilir. Ayrıca JUnit için javadoc jar dosyası da bulunmaktadır.

Assert Sınıfı

JUnit Assert sınıfı org.junit içerisinde bulunmaktadır. Eskiden kullanılan Assert sınıfı junit.framework isimli bir paket içerisindedir. Biz burada diğeri deprecated olduğu için org.junit içerisindeki Assert sınıfını kullanacağız.

Bu sınıfın assertTrue metodları herhangi bir koşulun doğru olup olmadığını test etmek için kullanılır. Bu metodlar akışın false edildiğinde assertError isimli bir exception nesnesi throw ederler. Assert metodlarının String parametreli metodları exception oluşması durumunda verilecek mesajı içermektedir. Sınıfın ArrayEquals metodları 2 tane dizinin eşitlik kontrolu için kullanılmaktadır. assertEquals metodları değerlerin eşit olup olmadığı bilgisine göre test yapmayı sağlamaktadır.

/*----------------------------------------------------------------------------------------------------------------------
    assertTrue metotları
----------------------------------------------------------------------------------------------------------------------*/
package org.csystem;

import org.junit.Assert;

class Util {
    public static boolean isPrime(int val)
    {
        if (val <= 1)
            return false;

        if (val % 2 == 0)
            return val == 2;

        if (val % 3 == 0)
            return val == 3;

        if (val % 5 == 0)
            return val == 5;        

        if (val % 7 == 0)
            return val == 7;        

        for (int i = 11; i * i <= val; i += 2)
            if (val % i == 0)
                return false;

        return true;
    }
}


public class App {    
    public static void main(String[] args)
    {    
        Assert.assertTrue(Util.isPrime(12));      
    }    
}

Double karşılaştırması yapan assertEquals metodları ayrıca bir eşitlik tolerans değeri parametresini de almaktadırlar. Sınıfın assertNull metodu verilen parametreye ilişkin object'in null olup olmadığını test etmek amaçlıdır.

Sınıfın assertSame metodları 2 tane referansın aynı nesneyi gösterip göstermediğini test etmek amaçlı kullanılır.

/*----------------------------------------------------------------------------------------------------------------------
    Assert sınıfı
----------------------------------------------------------------------------------------------------------------------*/
package org.csystem;

import java.util.Random;

import org.junit.Assert;    

public class App {    
    public static void main(String[] args)
    {    
        int seed1 = 10;
        int seed2 = 10;

        Random r1 = new Random(seed1);
        Random r2 = new Random(seed2);

        int [] a = new int[10];
        int [] b = new int[10];

        Assert.assertEquals(a.length, b.length);

        for (int i = 0; i < a.length; ++i)
            a[i] = r1.nextInt();

        for (int i = 0; i < b.length; ++i)
            b[i] = r2.nextInt();

        Assert.assertArrayEquals(a, b);

        //...
    }    
}

Anahtar Notlar: Bu sınıf test amaçlı kullanılmalıdır. Assert metodlarından alınan sonuca göre akış oluşturulmamalıdır yani gerçek ürünle Assert kodları olmamalıdır.

Birim testlerinin geliştirilen uygulamaya göre yapısı değiştirilebilir, programcı ona geliştirilen kodları yazmalıdır.

results matching ""

    No results matching ""