JVM Nasıl Çalışır Yazı Serisi – Java Just In Time Compiler (JIT) Nasıl Çalışır?
Java’yı çoğu programcı yorumlanan (interpreted) dil olarak bilir. Java’nın yavaş olduğu efsanesi de başlangıcını da burada bulur. Bytekod olarak derlenen Java sınıfları Java sanal makinesi (Java Virtual Machine – JVM)…
Tdd yapısına yeni yeni başlıyorum. Hangisine göre sistemi yazmak dha mantıklı ?
Web tabanli bir uygulama ise, o zaman topdown tarzi daha uygun olacaktir. ATDD yaparken sistemin bazi bölümlerini de bottom-up tarzi gelistirebilirsiniz, yani iki türü de kombine etmek mümkün.
Peki top-down yaklaşımını controller’dan itibaren kullandığınız durumlarda service katmanı testlerini de integration testleri şeklinde yapıp gerçek bir db’ye mi sorgu atıyorsunuz yoksa onları yazarken dao’yu mock’layıp izole bir şekilde mi test ediyorsunuz? Eğer service katmanını da controller’ları test eder gibi test edersek bu durumda hem controller hem de service testlerinin @Before ilkyüklemelerini çiftlemiş olmaz mıyız? Neticede ikisinde de öncesinde db’ye veri yüklemeleri yapılacak. Belki de bu durumda ‘default’ test ilkyüklemesi oluşturup ayrı bir sınıftan okumak lazım entity’i.
Topdown TDD yaparken bazen gercek veri tabanini kullaniyorum, bu durumda entegrasyon testleri yazmis oluyorum, bazen de alt katmanlari mocklayarak gercek birim testleri yaziyorum. Bu benim nasil ilerlemek istedigimle ve projenin kapsami ile ilgili bir durum.
Birde extreme topdown tdd türü olarak isimlendirdigim bir TDD türü daha uyguluyorum. Buna göre TDD ile olusturdugum testlerin hepsi onay/kabul testleri. Bu testleri implemente ederken kesinlikle mock kullanmiyorum. Testler en tepeden sisteme girip, en altindan cikana kadar tüm gerekli modüllerin olusmasini sagliyor. Buna gösterim, servis ve veri katmaninda yer alan siniflar da dahil. Buna göre onay/kabul testleri gösterim katmanini sekillendirecek sekilde yapilaniyor. Gerekli tüm katmanlar olusmadigi sürece test kirmizi kaliyor. Taki en altta yer alan veri tabani tablosuna erisip, gerekli islemleri veri katmani üzerinden yapana kadar testleri ve paralelinde gercek isletme mantigi kodunu gelistirmeye devam ediyorum. Test yesil oldugunda bir onay kabul testi icin gerekli her seyi implemente etmis oluyorum ve sistem calisir hale oluyor. Bunun üzerinde kullanici hikayesinde (user story) yer alan diger onay/kabul testlerini implemente etmeye devam ediyorum. Tüm onay/kabul testleri implemente edildiginde, kullanici hikayesinin implementasyonunu tamamlamis oluyorum.
Extreme topdown yaparken H2 gibi in memory calisan veri tabani sistemlerinin kullanilmasinda fayda var. Bu olusan entegrasyon testlerinin hizli calismalarini sagliyor. Bu sekilde cok genis kapsamli refactoring yapma yetenegim bulunuyor, cünkü entegrasyon testlerinin tamamlanmasi saatleri bulabilir. Gercek anlamda refactoring yapabilmek icin TDD ile birim testlerinin olusturulmasi gerekir.