Java JUnit ile Birim Test Yazma

Bu yazımda sizlere Java programlama dilini kullanarak JUnit kütüphanesi ile nasıl birim testler oluşturabiliriz konusunu anlatacağım. Biz birim test yazmak için FizzBuzz algoritmasını kullanıyor olacağız. Öncelikle birim test ile ilgili bildiklerimi aktarmak istiyorum. Hadi başlayalım 🙂

Birim Test Nedir ?

Birim testler yazılan bir kodun test edilmesi için yazılmaktadır. Birim testler yazılımın en küçük parçaları olan method ve fonksiyonların davranışlarına odaklanmaktadır. Birim testler genellikle yazılım geliştiriciler tarafından yazılmaktadır ancak günümüzde test uzmanları da birim testler yazabilmektedir.

Birim Test Neden Yapılır ?

Birim testler hata bulmak için yapılmaz çünkü birim testler sadece method veya fonksiyonların davranışlarını test eder ancak bir bütünü test ederek hatalar bulunabilir. Hata bulmak için entegrasyon veya sistem testi yapılması gerekmektedir. Birim testlerin asıl amacı kaliteli, temiz ve bakımı kolay kod yazmaya teşvik etmesidir.

Netbeans ile Test Projesi Oluşturmak

Birim testleri Java programlama dilini kullanacağımız için java kodlarımızı Netbeans IDE ortamında yazıyor olacağız. Netbeans IDE programını buraya tıklayarak bilgisayarınıza indirip kurulumunu yapabilirsiniz. Siz farklı bir IDE de kullanabilirsiniz. File menüsünde New Project (CTRL + SHIFT + N) seçeneğine basın. Karşınıza aşağıdaki gibi proje tipi seçim ekranı gelecektir buradan Java > Java Class Library seçerek Next butonuna basın. Project Name alanına projenizin adını yazın ve Finish butonuna basın.

Choose Project

Proje oluşturulduğunda aşağıdaki gibi görünmesi gerekmektedir.

FizzBuzz Project

Source Packages klasörünün üzerinde sağ tıklayın New > Java Package seçeneğine basın. Açılan ekranda package name alanına package ismini yazın ve Finish butonuna basın. FizzBuzz algoritmasının kodunu yazabilmek için oluşturduğumuz package’ın üzerinde sağ tıklayın ve New > Java Class seçeneğine basın. Class name alanına sınıfın adını yazın ve Finish butonuna basın.

Fizz Buzz Algoritmasının Gereksinimleri

  • 1 ile 100 arasında bir sayı al eğer sayı 3’e tam bölünüyorsa string “Fizz” değerini döndür.
  • 1 ile 100 arasında bir sayı al eğer sayı 5’e tam bölünüyorsa string “Buzz” değerini döndür.
  • 1 ile 100 arasında bir sayı al eğer sayı 3 ve 5’e tam bölünüyorsa string “FizzBuzz” değerini döndür.
  • 1 ile 100 arasında bir sayı al eğer sayı 3 ve 5’e tam bölünmüyorsa string “Girilen sayı 3 ve 5’e tam bölünmüyor.” değerini döndür.
  • Eğer girilen sayı 1 ile 100 arasında değilse string “Girilen sayı 1 ile 100 arasında olmalıdır.” değerinin döndür.

Fizz Buzz algoritmasının gereksinimlerine göre kod görünümü aşağıdaki gibi olacaktır.

class FizzBuzz {

    public String sayiKontrol(int x) {
        if (x % 3 == 0 && x % 5 == 0) {
            return "FizzBuzz";
        }
        if (x % 3 == 0) {
            return "Fizz";
        }
        if (x % 5 == 0) {
            return "Buzz";
        }
        if (x % 3 != 0 && x % 5 != 0) {
            return "Girilen sayı 3 ve 5'e tam bölünmüyor.";
        }
        if (x < 1 && x > 100) {
            return "Girilen sayı 1 ile 100 arasında olmalıdır.";

        }

        return null;
    }
}

JUnit Kütüphanesinin Projeye Dahil Edilmesi

Yazdığımız kodun birim testini yazabilmemiz için projemize JUnit kütüphanesini import etmemiz gerekmektedir. Bunun için Libraries klasörünün üzerinde sağ tıklayın ve Add Library seçeneğine basın. Açılan Add Library ekranından JUnit 4.12 kütüphanesini seçin ve Add Library butonuna basın. JUnit kütüphanesi projemize dahil edilmiş olacaktır.

Add Library

Test Sınıfının Oluşturulması

Projenin üzerine sağ tıklayın New > JUnit Test seçeneğine basın. New JUnit Test ekranından Class Name ve Package alanlarını doldurun ve Finish butonuna basın test sınıfı otomatik oluşturulacaktır.

New JUnit Test

Fizz Buzz uygulaması için yazılan birim test kodu aşağıdaki olacaktır.

import org.junit.After;
import org.junit.Test;
import org.junit.Assert;
import org.junit.Before;

public class FizzBuzzTest {

    //Her methoda sınıf örneğini oluşturmamak için field tanımlandı.
    private FizzBuzz fizzBuzz;

    // Her test methoduna girmeden önce setUp methoduna girecek ve sınıfın örneğini oluşturacak.
    @Before
    public void setUp() {
        fizzBuzz = new FizzBuzz();
    }

    @Test
    public void sayininUceBolunmeDurumu() {

        Assert.assertEquals("Fizz", fizzBuzz.sayiKontrol(3));
    }

    @Test
    public void sayininBeseBolunmeDurumu() {
        Assert.assertEquals("Buzz", fizzBuzz.sayiKontrol(5));
    }

    @Test
    public void hemUceHemBeseBolunmeDurumu() {
        Assert.assertEquals("FizzBuzz", fizzBuzz.sayiKontrol(30));
    }

    @Test
    public void sayiUceVeBeseBolunmemeDurumu() {
        Assert.assertEquals("Girilen sayı 3 ve 5'e tam bölünmüyor.", fizzBuzz.sayiKontrol(7));
    }

    @Test
    public void birIleYuzArasindaOlmamaDurumu() {
        Assert.assertEquals("Girilen sayı 3 ve 5'e tam bölünmüyor.", fizzBuzz.sayiKontrol(101));
    }

    //Test methodu çalışmasını bitirdikten sonra tearDown methoduna girecek ve ilgili sınıfı null olarak set edecek.
    @After
    public void tearDown() {
        fizzBuzz = null;
    }
}

Birim test kodlarını yazdıktan sonra sınıfın üzerinde sağ tıklayın ve Run File (test sınıfında yer alan tüm test methodlarını çalıştırmak için) seçeneğine basarak birim test kodunu çalıştırın. Test sonuçları aşağıdaki gibi olacaktır. Tek tek test methodu çalıştırmak içinse çalıştıracağınız test methodunun üzerinde içen sağ tıklayın Run Focused Test Method seçeneğine basın.

Test Results

Faydalı olması dileğiyle…