Birkaç haftadır yazı yazamıyorum. Bunun sebebi işyerinde bana verilen işlerin yoğunlaşmış olması. Bu hafta bir test projesi verildi bana. En son adamakıllı testi ÖSSde çözmüş olan ben :), test deyince kafamda birşey oluşmadı tabii. Ama bu bir haftadaki araştırmalarım gösterdi ki, testler yazılımlar için kritik bir rol oynuyorlar ve yazılmaları bazen test edeceğimiz koddan çok daha zor olabiliyor. Mesela ben 30-40 satır bir kod için yaklaşık 150 satır test kodu yazmak durumunda kaldım. Ama gözünüzü korkutmasın, bir öğrendiniz mi gerisi geliyor :)
Test için çeşitli kütüphaneler mevcut, ben Junit'i tercih ettim. Sitesinden son versiyonunu indirip projenizin "Build path" kısmına ekleyerek kullanmaya başlayabilirsiniz. Burada yardımcı olarak bir kütüphane daha kullanacağız, bu da Jmockit kütüphanesi. Kod kısmında bazen fonksiyonları kendi istediğimiz gibi yönlendirmemiz gerekebiliyor, mesela veritabanına bağlanarak veri çeken, ama testte veritabanına bağlanmadan verileri hazırlamak istediğimiz bir metodu test ederken, projenin DAO(Data Access Object) kısmında veriyi çeken metodu Mock ederek, yani bir şekilde Bypass diyebiliriz, bu işi halledebiliriz. Nasıl olacağını kod kısmında hepberaber görelim.
// Bu method test başlamadan önce çalışır, constructor ya da page_load fonksiyonları gibi düşünebiliriz
@Before
public void setUp() throws Exception {
instance = new HafifmuzikDriverImpl();
}
// Bu method da test bittikten sonra çalışır, veritabanı bağlantısını vb. kesebileceğiniz yerdir. Hata yakalamadaki finally kısmına benzer. @After
public void tearDown() throws Exception {
}
// Burada DataDriverImpl sınıfında bulunan mockDataDriverImpl fonksiyonunu Mock ediyoruz
MockUp<DataDriverImpl> mockDataDriverImpl = new MockUp<DataDriverImpl>(){
@Mock
public String fillExportDataWith(){ return mockDataExportData;
}// Bir sınıf için birden çok fonksiyonu mock edebiliyoruz
@Mock
public DataLogger getLogger() {
return DataLoggerFactory.getLoggerInstance(this.getClass());
}
};
...
...
...
// Burada karşılaştırma işlemi yapılıyor, ilk parametre expected value, ikincisi actual value. assertEquals("12486564", fillExportDataWith());
Kısaca test işlemi buydu. Burada zor olan kısım test işleminden ziyade Mock işlemleri bence. Daha detaylı bilgileri junitin ve jmockitin sitelerinden ve google'den öğrenebilirsiniz. Ayrıca aşağıdaki linkte de çok değerli ve geniş bilgiler bulunmaktadır.
http://erhan.kesken.org/2011/03/jmockit-ile-ideal-birim-test.html
Herkese kolay gelsin.
Hiç yorum yok:
Yorum Gönder