16 Ağustos 2016 Salı

Birim Test ve JUnit Kullanımı

Herkese merhaba, bu yazımda Birim Test ve Java'nın bir kütüphanesi olan JUnit'den bahsedeceğim. Yazının içeriğine alt başlıklar halinde şöyle bir bakacak olursak;

Birim Test nedir?
Yazılım Projesinde Birim Test'in Önemi nedir?
JUnit nedir? - Junit'de kullanılan assertion / annotation kavramları nelerdir?
Eclips'de JUnit oluşturulması ve çalıştırılması nasıl olur?

    Birim Test
En basit anlamda projemizdeki fonksiyonların çalışıp çalışmadığını kontrol eder. Birden fazla birim testimiz olabilir fakat hepsi birbirinden bağımsız çalışmalıdır. Yani her test için odaklanılan tek nokta vardır. Testler sonuç olarak bize true / false döndürürler.
Birim Test hataları bulmak için kullanılmaz, bizim verdiğimiz girdiler ile fonksiyonun çalışırlığını kontrol eder.
Projemizde kaç tane fonksiyon varsa o kadar test olmalıdır.
Birim Test nedir? sorusuna cevap bulduktan sonra şimdi neden kullanılıra gelelim;

    Yazılım Projesinde Birim Test'in Önemi nedir?
Bize kaliteli kod yazmamızı sağlar. Projeyi geliştirme esnasında yanlışlarımızı görmemizi sağlar. Bütün bileşenleri birbirinden bağımsız bir biçimde tasarlamış oluruz. Böylelikle bakımı daha kolay ve kaliteli bir yazılım ortaya çıkar.
Şimdi Java'da test olayına bakalım;

    JUnit nedir? - Junit'de kullanılan assertion / annotation kavramları nelerdir?
Projemizde bulunan fonksiyonların doğru çıktı verip vermediğini kontrol etmemize yarayan Java kütüphanesidir. Testimizin çalışabilmesi için öncesinde ve sonrasında olması gereken işlemler olabilir. Örnek olarak test edeceğimiz fonksiyonun çalışabilmesi için bir veritabanı bağlantısı gerekiyorsa bunu testten önce sağlamamız gerekir. Böyle durumlarda annotation kullanırız. Testlerde kullanılan annotation'lara bakarsak;

@Test :  Metodun test edileceğini gösterir
@Test(expected = Exception.class) :  Metod hata fırlatmalıdır
@Before : Metodtan önce çalışır.
@After :  Metodtan sonra çalışır
@BeforeClass : Sınıf instance olduğunda bir defalığına çalışır
@AfterClass :  Metodları test ettikten sonra çalışır
@Ignore : Test edilmesini istemediğimiz metodları temsil eder

Test ettiğimiz fonksiyonların dönüş değerlerine göre durum karşılaştırmaları yaptığımız assertionlar vardır.
Bunların kullanımına bakacak olursak;

public class OrnekTest{
 
 @Test
 public void tabikiTest(){
  String name = "Kerem";
  assertEquals(name, OrnekSinif.getPersonName());
 }
}

OrnekSinif(nasıl bir sınıf ismiyse :D )'ın getPersonName() fonksiyonundan dönen isim ile bizim oluşturduğumuz ismi karşılaştırıyoruz.
assertEquals() metodu bu iki değer doğruysa test sonucunu true olarak döndürecektir.
Birçok assertion bulunmaktadır bunların tam listesi.

Şimdi artık Eclips'te bir JUnit oluşturup, çalıştırmaya bir bakalım:

✖ Öncelikle projemize JUnit bağımlılıklarını ekliyoruz.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

✖  New → Other  JUnit → JUnit Test Case 
Daha sonra testimizin ismini belirleyip Finish diyoruz.

import org.junit.Test;


public class TestOrnek {

 @Test
 public void test() {
  fail("Not yet implemented");
 }
}

Oluşan testimizin içeriği böyle oluyor.
Burada @Test kısmına girdileri verip sonuçların doğruluğunun kontrolünü yaparız.

Şimdi bu testimize örnek bir uygulama yapalım.

import static org.junit.Assert.*;
import org.junit.Test;

public class TestOrnek {
 public int topla(int x, int y){
  int sonuc = 0;
  sonuc = x + y;
  return sonuc;
 }
 @Test
 public void test() {
  int sonuc=0;
  sonuc = topla(5, 10);
  assertEquals(15, sonuc);
 }
}

Burada eğer topla fonksiyonumuzun sonucu 15 ise testimiz true olarak dönüş yapacaktır.


Testimizin çalışırlığını böylece kontrol etmiş oluruz.
İyi çalışmalar.

Hiç yorum yok:

Yorum Gönder