Merhabalar,
Bu yazımda Java’ da test işlemlerine değinmeye çalışacağım. Öncellikle test işlemi nedir, bunu bir tarif etmeye çalışalım. Uygulamaların kodlama süreci boyunca birçok hata ile karşı karşıya kaldığımız ve hala da kalabileceğimiz kaçınılmaz bir gerçek. Peki bu hataları bulup düzeltme yöntemleri içerisinde en çok kullanılanları nelerdir diye soracak olursam herhalde genel cevap şu olur: debug, test kodları ve tabiki araya serpiştirilmiş System.out.println() kodları 😀 :D.
Öncelikle debug ile test arasında farka bakalım. Debug işleminde olaylar adım adım gider ve kullanıcı dönen değerleri kendi kontrol etmek zorundadır. Test işleminde ise kullanıcının kontrol etmesine gerek kalmadan karşılaştırmaları ve doğruluğu yanlışlığı JUnit yapar. Kullanıcıya sadece beklenen ve o anki değerleri verip ekranın altındaki çıktı bölümüne bakmak düşer :D. İsterseniz hemen bir örneğe göz atalım.
package com.farukbozan.junit;import java.util.Random;public class Test { public String newString() } |
Buradaki örnek oldukça basit ve mantığı açığa çıkarmak açısından verilmiştir. Sınıfımıza göz atarsak klasik Java sınıflarından herhangi bir farkı yok. Bir tane rastgele int tipinde değer dönderen metot ve bir tane de String tipinde değer dönderen metot var. Gelelim test işlemlerinin yapılacağı sınıfa, aşağıdaki gibi.
package com.farukbozan.junit;import org.junit.After; public MainTest() { @BeforeClass @AfterClass @Before @After @Test @Test } |
Yukarıdaki tabloda görmüş olduğunuz sınıf test işlemlerinin gerçekleştirileceği sınıf. Sınıfın adında main geçmesine rağmen dikkat etmenizi istediğim nokta sınıf içerisinde main metodunun olmaması. Yani test işlemleri için çalışabilir bir sınıfa ihtiyacımız yok. Sadece kullanılabilir kodların olması yeterli. Yapılandırıcı içerisinde metotlarını test edeceğimiz sınıfı oluşturuyoruz. @BeforeClass ile işaretlenmiş metot, test sınıfında test işlemlerinden önce bir defa çalışan metottur. Aynı şekilde @AfterClass ise sonra çalışır ve bir defa. @Before her test metodundan önce, @After her test metodundan sonra çalışır.
Sıra geldi test edilecek metotlara. Test işlemi için ayrı olarak metotlar yazıyoruz. Burada testi çalıştıracak olan metodun isminin önemi yok. Yani test edilecek metot isminden farklı olabilir. Yalnız muhtemelen fark ettiğiniz gibi test metotların üstünde @Test belirteci yer almaktadır. Böylece bu metotlar test işlemine tabi tutulacaktır. Bu belirtecin kullanılmadığı metotlar test işlemine tabi tutulmaz. Random değer üreten metodun testine baktığımızda şu ifade karşımıza çıkıyor.
assertEquals(1, testClass.randomIntValue());
Test işlemleri assert ön eki ile başlayan metotlarla yapılır. Burada parametre olarak verilen iki değerin eşitliğini test ediyoruz. 1 bizim istediğimiz değer, 2. parametre ise test edilecek değerdir. Metot random değerler ürettiği için test bazen başarılı olacak, bazen de başarısız olacaktır.
Diğer iki test metodu
assertNotNull(testClass.newString());
assertEquals(new String(), testClass.newString());
ise String ifadeler üzerinden test işlemi yapmaktadır. İlk olarak üretilen String ifadenin null olup olmadığına bakılmaktadır. Daha sonra yeni bir String ifade ile eşit olup olmadığına bakılmaktadır. Bunlara benzer onlarca assert ön eklie test metodu var. Size uygun olanını seçerek oldukça kolay hata bulma işlemleri sağlayabilirsiniz. Son olarak da test işlemlerinin iki ekran çıktısına bakalım.
Bol Java’ lı günler dileğiyle…
Yazan: Faruk BOZAN (Yazılım Mimarı / Software Architect)