Parametrik Konstruktör (Parameterize Constructor)

Ara 29th, 2011 | Yazar: Özcan Acar | Kategori: Refactoring

Bir sınıf konstruktörü bünyesinde oluşturulan nesne, bu sınıfın test edilmesini zorlaştırır. Bunun bir örneğini EmployeeManager sınıfında görmekteyiz. Sınıf değişkeni olan dao konstruktör bünyesinde oluşturulmaktadır.


package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager() {
		this.dao = new EmployeeDao();
	}
}

EmployeeManager sınıfının test edilebilmesi için EmployeeDao‘nun kullanılması zorunludur. EmployeeDao burada dolaylı bir bağımlılık teşkil etmektedir. Büyük bir ihtimalle EmployeeDao sınıfı çalışır durumda olan bir veri tabanına ihtiyaç duymaktadır. Bu durum EmployeeManager sınıfının test edilebilirliğini zora sokmaktadır.


package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManagerTest {

	public void testEmployeeManager()
	{
		EmployeeManager manager = new EmployeeManager();
		Assert.assertTrue(manager.pay() == 0);
	}
}


Bir parametrik konstruktör oluşturarak bu sorunu ortadan kaldırabiliriz.


package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager(final EmployeeDao myDao) {
		this.dao = myDao;
	}

	public int pay() {
		return 0;
	}
}

EmployeeManager sınıfının kontruktörünü EmployeeDao sınıfından bir parametre ile genişletiyoruz. Bu şekilde ihtiyaç duyduğumuz EmployeeDao sınıfından bir nesneyi dışardan enjekte edebiliriz. EmployeeDao sınıfının bir interface sınıfı olduğunu düşünürsek, testlerimiz bünyesinde kullanılmak üzere FakeEmployeeDaoImpl ismini taşıyan ve veri tabanına bağımlılığı bulunmayan yeni bir implementasyon oluşturabiliriz.


package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeTest {

	public void testEmployeeManager()
	{
		EmployeeDao dao = new FakeEmployeeDaoImpl();
		EmployeeManager manager = new EmployeeManager(dao);
		Assert.assertTrue(manager.pay() == 0);
	}
}


EOF (End Of Fun)
Özcan Acar

Share Button

Özcan Acar

Bilgisayar mühendisi olan Özcan Acar 1997 yılından beri programcı olarak çalışıyor.

KurumsalJava.com, SmartHomeProgrammer.com ve Mikrodevre.com adresleri altında blog yazıyor. Kurduğu BTSoru.com'da ona yazılımla ile ilgili sorularınızı yöneltebilirsiniz. Pratik Programcı Yayınları bünyesinde Pratik Spring, Pratik Agile, Pratik Git ve Design Patterns ismini taşıyan kitapları bulunmaktadır. 21.12.2009 tarihinde Java Champion olarak seçildi.
  • Share/Bookmark
yorum yok. | 1.704 kez okundu |

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (Değerlendirme bulunmuyor)
Loading ... Loading ...
Tags:

BU YAZI İÇİN BİR YORUM YAPABİLİRSİNİZ.