Java JUnit 5 ile Mock (Taklit) Nesnesinin Eclipse’te Kullanımı

Yazılım testi alanında mock (taklit) nesnelerine sıkça başvurulur. Test altındaki modül veya servis eğer hazır olmayan ya da şu an aktif olmayan bir modül kullanıyorsa bu durumda testi yapmak pek mümkün olmayacaktır. Bu gibi durumlarda taklit nesnelerinin kullanımı oldukça uygundur. Eclipse içinde JUnit 5 kullanılarak yazılmış olan bir birim testinde mock nesnesinin nasıl kullanılacağını bu yazımızda göstermeye çalışalım. Mockito çerçevesi kullanılacaktır. Bunun için bağımlı olan bütün bileşenler http://fatihadak.com.tr/upload/programming/mockito_junit_jupiter_3.5.13.zip adresinden indirilebilir.

Örnek senaryo şu şekilde özetlenecek olursa, elimizde bir şekil arayüzü ve bu arayüzü kullanarak alan hesaplayan Alan servisi bulunmakta, Dikdörtgen sınıfı bu senaryoda yazılmayacak ve Alan servis test sınıfında alan servis test edilmek isteniyor fakat ortada bir şekil olmadığı için test başarısız olacaktır. Bu durumda şekil sınıfını taklit edecek mock nesnesi kullanıp bu problemi çözmüş olacağız.

Yukarıdaki resimde görüldüğü gibi projede sadece bir arayüz ve alan hesabı yapan bir Alan seviş sınıfı bulunmaktadır.

package Sekiller;

public interface ISekil {
	public double Alan();
}
package Sekiller;

public class AlanServis {
	private ISekil Isek;
	
	public double AlanHesapla() {
		return Isek.Alan();
	}
	public ISekil getSekil() {
		return Isek;
	}
	public void setSekil(ISekil Isek) {
		this.Isek = Isek;
	}
}

Proje bir test klasörü ve AlanServis’i test edecek bir test sınıfı (Junit Test Case) eklenecek olursa,

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import Sekiller.*;

@DisplayName("Alan Servis Testi")
class AlanServisTest {

	public AlanServis As;
	public ISekil Isek;
	
	@BeforeEach
	public void setUp() {
		As = new AlanServis();
		As.setSekil(Isek);
	}
	
	@Test
	@DisplayName("Alan Testi")
	public void testAlan() {
		assertEquals(50.0, As.AlanHesapla(),0);	
	}

}

Nullpointerexception hatası fırlatılıp test çalışamayacaktır. Bunun nedeni ortada herhangi bir şekil olmamasıdır.

Yukarıda paylaşılan linkten jar dosyaları indirilip projeye dahil edilir.

@DisplayName("Alan Servis Testi")
class AlanServisTest {

	public AlanServis As;
	public ISekil Isek;
	
	@BeforeEach
	public void setUp() {
		Isek = Mockito.mock(ISekil.class);
		As = new AlanServis();
		As.setSekil(Isek);
	}
	
	@Test
	@DisplayName("Alan Testi")
	public void testAlan() {
		Mockito.when(Isek.Alan()).thenReturn(50.0);
		assertEquals(50.0, As.AlanHesapla(),0);	
	}
}

Burada kullanılan mock ve when metotları ile testin başarılı geçtiği görülecektir.

You may also like...