Java – Unit test nedir? JUnit kullanımı

Standart
Bilgiyi paylaşarak çoğalt !Tweet about this on TwitterShare on LinkedIn5Share on Google+0Share on Facebook2Pin on Pinterest0

Bu makalemizde Java’da kullanılan JUnit‘den bahsedeceğiz. Ama öncelikle Unit test mantığının ne olduğuna bakalım.

Unit testin anlamı, sınıflar, metotlar gibi uygulamanızın daha küçük birimlerinin test edilmesidir. Bu testin yapılmasındaki amaç kendinize, müşterilerinize veya bir başkasına çalıştığınız kodu çalıştığını ispat etmektir. Unit testler tipik olarak otomatik çalışır, implemente edildiğinde ki anlamını korur ve tekrar tekrar kullanılabilir.

Özetleyecek olursak:

  • Sistemin en küçük birimlerini test etmektir,
  • Hızlıdırlar,
  • İzolasyon kritiktir ve hiç bir testin diğer testleri ya bir dış kaynağın çalışan testleri etkilememesi gerekir.
  • Kodda hata oluştuğunda kesin olarak hatanın nerede oluştuğunu saptamak çok kolaydır. (Çünkü sistemin en küçük birimlerini test ediyoruz),
  • Yüksek Code Coverage almaya uygundur.

Unit testin faydaları:

  1. Yazılan kodun her satırının başka bir kod (test kodu) tarafından otomatik olarak test edilmesini sağlar.
  2. Kodun anlaşılmasını kolaylaştırır.
  3. Daha hızlı yazılım geliştirmeyi sağlar.(Proje başlangıcında projeyi yavaşlatır gibi görünmekte fakat projenin ileri dönemlerinde ciddi bir zaman kazanımı sağlamaktadır)
  4. Koddaki hata oranını azaltır.
  5. Kodların kalitesinin artmasını sağlar.
  6. Hataların çabuk tespit edilip düzenlenmesini sağlar.

JUnit ise bu testlerin Java ile yapılmasını sağlayan bir kütüphanedir. Gelin nasıl çalıştığını, implemente edildiğini daha iyi kavramak için uygulamaya dönelim.

Eclipse ile yeni bir Java projesi oluşturun. İsmine dilediğiniz bir ismi verebilirsiniz. Sonrasında BenimUnitim adında bir class ekleyelim projemize.

Bu sınıfı, daha kolay anlamayı sağlamak için çok basit tuttum. Şimdilik buna takılmayın. Bu sınıfı test etmek için bir tane unit teste ihtiyacım var. Birden fazla metodum olsaydı bir den fazla unit teste ihtiyacım olacaktı (unit test sayısı = metot sayısı).

Unit testleri kendi test metotları bulunan sınıf şeklinde implemente edilir. Her test metodu, hedef alınan sınıftaki tek bir metodu test eder. Bazen test metodu istenen sınıfta bulunan birden çok metodu da test edebilirken bazen de eğer test edilecek metot çok büyükse, küçük çoklu testlere ayrılır.

Şimdi  JUnit sınıfımızı oluşturalım. Proje klasöründe yeni bir klasör oluşturup adına “Testler” diyelim. Oluştuktan sonra klasöre sağ tıklayın New/Other‘e tıklayın. Açılan pencerede Java dizinini seçin ve alt klasörlerde bulunan JUnit klasörüne tıklayın. JUnit Test Case‘i seçip Next e basın.  New JUnit 4 test seçili benimkinde. Sizinkinde en güncel sürüm neyse onu kullanabilirsiniz. Name kısmına BenimUnitTestim adını vererek Finish e basalım. Oluşan sınıfta aşağıdaki gibi bir çıktı olacaktır:

Şimdi bu metodu kendi testimiz için şu şekilde çevirelim:

Burada size biraz varklı olarak @Test annotation’ı farklı gelebilir. Bunun manası bu metodun bir unit test olduğunu bildirmek.

testBirlestirme ‘nin içine bakalım. İlk olarak önceden oluşturmuş olduğumuz BenimUnitim adındaki sınıfımızdan unit adında bir nesne oluşturduk. Daha sonra bu unit nesnemizde bulunan birlestirme metodumuzu çağırıp, parametre olarak da “bir” ve “iki” geçirdik ve dönen değeri sonuc adındaki bir değişkene attık.

Şimdi birlestirme metodumuzun ne işe yaradığına bakalım. Kendisine gelen iki parametreyi, String operasyonlarında bulunan concat işlemiyle birleştirip return ediyor. Yani verdiğimiz parametrelerin aslında nasıl çıkacağını biliyoruz. İşte burada testini yapacağımız nokta. Eğer beklediğimiz çıktıdan farklı bir çıktı ile karşılaşabilir miyiz? Bu testide assertEquals metodu ile kontrol ediyoruz. aldığı ilk parametre, çıkmasını beklediğimiz sonuç; ikinci parametre ise metodumuzdan dönen değer.

BenimUnitTestim sınıfını aşağıdaki gibi çalıştıralım:

junit-calistirma

Çalışma sonucunda sol tarafta aşağıdaki gibi bir ekran açılacak:junit-result

Bu bize metodumuzdan dönen sonucun beklediğimiz sonuç ile aynı olduğunu yani doğru değer olduğunu göstermektedir. Eğer beklediğimiz değeri “birikiuc” gibi değiştirseydik yani

yapsaydık, testimizi çalıştırdığımızda aşağıdaki sonucu alacaktık:

junit-yanlis-deger-denemesi

Burada bizi bilgilendiriyor. Beklenen değer “birikiuc” iken metottan dönen değer “biriki” geldi diye.

Unit testler bu kadar kolay fakat bir o kadar da yazılımcı için kendine güveni arttıran bir konudur.

Kendinize iyi bakın!

3 Comments

Leave a Reply