JUnit 4

Bir aralar, yüksek lisansa ilk başladığımda aldığım bir ders sonucu Test güdümlü yazılım geliştirme konusuna merak sarmıştım. Ders kapsamında da test güdümlü yazılım geliştirme yöntembilimi yardımıyla yaptığımız bir proje ödevimiz de vardı. Önce testleri yazıyorduk, sonra testleri doğrulayacak kodlarımızı. Oldukça hoş, naif ve kolay bir yöntembilimdi. Gerçi testleri yazarken testlerin nasıl yazılması gerektiği, neyin sınanıp sınanamayacağı konularını irdelemek bir tecrübe gerektiriyordu.

Testler için Java'ya yönelik olarak JUnit aracını kullandık. JUnit 3. sürümü kullanılıyordu. Üzerinden 2-3 yıl geçti. Ondan sonra arkadaşlarla yapmaya çalıştığımız bir kalıcı katman gerçekleştirimi esnasında da bu yöntembilimden yararlandık ve bazı arkadaşlara öğrettik, beraber kendimizi geliştirdik. Aradan geçen yıllarda önce test yaklaşımı alışkanlığımı kaybettim, artık Python'a kaymak gibi tercihlerim oldu ve Java geliştirmesinde büyük yazılımlarla uğraşmadığım için testleri yazmadan çalışan kod üretme yaklaşımını benimsedim. Uzun zamandır çok büyük bir projeyle uğraşmamamın da etkisi vardır. Ağırlığı teorik kısma verince sonuç bu oluyor :)

Yazmaya başlayınca iyice uzatıyorum. Aslında JUnit'in 4. sürümünde kolaylaşan test yazımlarından bahsedecektim. Ve herkese Test güdümlü geliştirmeyi araştırması, öğrenmesini önerecektim. Yazı geçmişten bahsetmeye başladı (yazı mı ben mi) :)

JUnit'in 4'ün en önemli getirisi "annotations" (Türkçesi: dipnot, not, açıklama teknik karşılığını bilmiyorum). Böylece çok kolay bir şekilde testleri yazabiliyorsunuz. Örnek verelim:

@Test public void simpleAdd() {
Money m12CHF= new Money(12, "CHF");
Money m14CHF= new Money(14, "CHF");
Money beklenen= new Money(26, "CHF");
Money sonuc= m12CHF.add(m14CHF);
assertTrue(beklenen.equals(sonuc));
}

@Test ifadesiyle bu metotun bir test metotu olduğunu belirtmiş oluyoruz, assertTrue ile de sınamamızı yapıyoruz.

Bu kadar kolay. Sınayacağınız sınıf içerisine de yazabileceğiniz gibi ayrı bir test sınıfı da kullanabilirsiniz.

Not: Python için unittest var
Kaynak: JUnit Cookbook,JUnit

2 yorum:

yavasyavas dedi ki...

ben de yılmadan TDD uyguluyorum.

önce testi yazmak diyince insanlar bu işi kodu test etmek için yaptığımı zannediyorlar. tabiki kodu test etmek bu işin önemli bir sonucu. yanlız ondan daha önemli üç sonuç var:
- yapacağın şeye gömülmeden önce ne yapacağını netleştirmek zorunda kalıyorsun.
- tasarımın test edilebilir olması için küçük, reusable objectlerden oluşmaya başlıyor. yani tasarımın iyileşiyor.
- kodu refactor ederken gönül rahatlığıyla yapıyorsun. çünkü testler şıp diye çalışıyor.

TDD alışkanlıklarımıza çok ters ama süper bir olay.

ufak ufak, yavaş yavaş, emin emin, çevik çevik

Tahir Emre Kalaycı dedi ki...

Evet, yazılım geliştirme alışkanlıklarına ters şeyler barındırıyor ama güzel bir olay. Bahsettiğiniz önemli sonuçları sayesinde bakımı kolay yazılımlar geliştirmek mümkün oluyor.