RSS

Servlet için Test Driven Development

0 Comments | This entry was posted on Jun 06 2010

Test driven development çok önemli bir olay. Standard java projelerinde junit kullanıyorum. Ancak bir web uygulaması yazıyorsanız servlet’leri test etmek bir dert olabilir.

Daha önce bu meseleyi şu şekilde çözüyordum: model ve controller class’larım için junit testlerimi yazıyor, servletlerin logic’ini daha basit bırakıyordum. Ancak yeni işimde (Oyun stüdyosu) komplex servlet implementasyonu ile karşılaştığım için servlet testi yazmam farz oldu.

Servlet’lerdeki testing problemi şu: bir container’a (tomcat gibi) ihtiyacınız var. Lakin muhteşem kütüphane HttpUnit kendi build-in container implikasyonuyla (türkçesini bilemedim) geliyor.

Kurulum için web sitesinden kaynağı indirip, jar ve dependency kutuphaneleri classpath inize eklemelisiniz.

Neyse lafı kısa kesip örneğe geçeyim. Örnek olabilecek en basit servlet testi. Ama giriş için iyidir bence.

Test kodu aşağıdaki gibi, bu benim için çalışan konfigurasyon.


@Test
public void testServlet() throws IOException, SAXException, ServletException {

File webXml = new File("./web/WEB-INF/web.xml");

// web.xml deki servlet tanımlarından olayi cozuyor
ServletRunner sr = new ServletRunner(webXml, "/BeerV1");
// servlet asagidaki gibi register de edilebiliyor ayrıca.
// sr.registerServlet("BeerSelect", BeerSelect.class.getName());

ServletUnitClient sc = sr.newClient();
WebRequest req = new PostMethodWebRequest("http://localhost:8080/BeerV1/BeerSelect.do");
req.setParameter("color", "Light");

InvocationContext ic = sc.newInvocation(req);
BeerSelect bs = (BeerSelect) ic.getServlet();

String servletInfo = bs.getServletInfo();
assertEquals("The servlet info is wrong", servletInfo, "My super beer selector");

// evet invocation context kullandıgımız için servlet metodlarını manual olarak cagiriyoruz.
bs.doPost(ic.getRequest(), ic.getResponse());
String color = bs.getColor();
assertEquals("The color is wrong", color, "Efes Light" );
}

Bu da servlet


public class BeerSelect extends HttpServlet {
private String _color = "";

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
String email = this.getServletConfig().getInitParameter("email");
request.setAttribute("email", email);

out.println("
Beer advisor
");
BeerExpert exp = new BeerExpert();
List res = exp.getBrands(request.getParameter("color"));

request.setAttribute("styles", res);

for( String s : res ){
this.setColor(this.getColor() + s);
}

RequestDispatcher dsp = request.getRequestDispatcher("result.jsp");
dsp.forward(request, response);

} finally {
out.close();
}

}

@Override
public String getServletInfo() {
return "My super beer selector";
}

public String getColor() {
return _color;
}
public void setColor(String _color) {
this._color = _color;
}
}

Bu kadar :)

Zend Framework’da bir Bug

0 Comments | This entry was posted on May 25 2010

Call to undefined method Zend_View_Helper_Placeholder_Container::ksort()

Bu hatayı zend framework bir şekilde veriyor. Sanıyorum bir bug’dan kaynaklanıyor bu sorun. Yeni versionlarda bu hata giderilmiş olması lazım.  Lakin en kolay (geçici çözüm) ise aşağıdaki metodu Zend/View/Helper/Placeholder/Container/Abstract.php dosyasına eklemek.

Oh yeah.
/**
* Sort the array by key
*
* @return array
*/

public function ksort()
{
$items = $this->getArrayCopy();
return ksort($items);
}

Elif Melikoğlu Yeni Blog

0 Comments | This entry was posted on Feb 17 2010

Açtı kendine. Çok da şık oldu. Kıskandım valla. Terzi kendi söküğünü dikemezmiş. Ben de ne zamandır düzenleyeceğim dediğim blog’umu bir türlü düzenlemedim ve artık vazgeçtim bile diyebilirim. Ablamın blogunu yaklaşık 10 dakikada açmamız (toplamda yarım saati geçti sanırım) sebebiyle ben de gaza gelerek temamı değiştirdim. Şimdilik bu kalsın. Daha sonra yine değiştireceğim (ben bu filmi görmüştüm).

Şu anki tema tam sevdiğim gibi minimalistik ancak solda menu olmaması biraz kötü aslında. Site ziyaretçisini yönlendirmiyor. Lakin yazılara konsantre olmamızı sağlıyor. Buraya bir çözüm getireceğim işallah.

Edit: Blog adresini yazmayı unutmuşum. http://www.elifmelikoglu.com

Yapi Kredi Usability Problemleri

0 Comments | This entry was posted on Feb 11 2010

İnternet bankacılığında tartışmasız en rezil banka yapı kredi. Az önce annemin kredi kartı hesabına 10 TL yatırmak için işlem yapmayı denedim. Başka kredi kartına ödeme menusunden kredi kartı no’su ve ücreti yazdım. Sistem uyarı verdi: “Geçerli bir kredi kartı numarası giriniz”. Sadece rakamdan oluşan (boşluk olmayan) bir şekilde girmiştim kart numarasını.

Sonra 4 hanelik rakamlar ve 1 boşlukdan oluşan şekilde girdim (5454 5454 5454 5454). Yine kabul etmedi. “Geçersiz kredi kartı numarası”. Çıldırdım tabi. Ne yapacağımı bilemedim. Ne bir yardım, ne açıklama bölümü var. Yardımda alakasız şeyler anlatılıyor.

Sonunda 444 0 444 hattını aradım. O kadar uzun sürüyor ki müşteri temsilcisini düşürmek. 2-3 dakika sonra tekrar bir deneme daha yaptım. O anda aklıma boşluk yerine tire koymak geldi (5454-5454-5454-5454). Ve ta taa. İşlemi kabul etti. Bu şekilde yazmak gerekiyormuş. Peki içime doğmasa nasıl bunu bilebilirdim. Ben değil de bilgisayarı zor kullanan insanlar bunu nasıl yapacak.

Neyse bununla da bitmiyor. Ödeme yap butonuna tıkladım. Onay sms’i gelecek. Geldi. SMS de “xxx kullanıcısına yapacağınız 1,000.00 TL tutarındaki ödemenin şifresi xxx” yazıyor. Yine çıldırdım. Tutar kısmına 10.00 TL yazmıştım. Bunun yazılım ekibindekilerin ufak bir hatası olduğuna eminim. Ama hesabımdan 1000 lira çekmemeleri için işlemi iptal ettim. Tekrar girdim. Bu sefer 10TL yazdım. Ve işe yaradı. Ama bir daha bu bankaya girmemeye de yemin ettim

Iphone’u 3G modem olarak kullanmak

0 Comments | This entry was posted on Jan 28 2010

mümkündür. az önce quiknet bağlantım kesildiğinde aklıma geldi bunu denemek.

olay çok basit: menuden SETTINGS -> GENERAL -> NETWORKS altında “Internet Tethering” i Aktive ediyoruz. Sadece usb mi yoksa bluetooth ile de bağlanmak istiyor musun diye soruyor. ben usb den bağlanmayı tercih ettim ama kablosuz bağlantı için bluetooth da çok kullanışlı bence.

sıra geldi bilgisayarı ayarlamaya. ben mac kullandığım için olay inanılmaz basit oldu. iphone u taktığım anda network bağlantısı bulundu açayım mı dedi. aç dedim ve bağlandı :) ayarları kontrol etmek isterseniz system preferences altından network bölümünde ayarlar mevcut.

şu an bu yazıyı iphone 3G üzerinden yazıyorum. 3G olmasaydı Edge üzerinden de bağlanabilirdim ama Edge oldukça yavaş bi bağlantı. dial up günlerine döndürüyo insanı. 3G üzerinden yaptığım ilk hız testi sonucu ise şudur:

iphone ile 3G hız testi

iphone ile 3G hız testi

sonuç olarak 3G modem için, iphone’unuz varsa, vodafone un falan verdiği usb modemlere ihtiyacınız yok.

Linux Başlangıç Programları

0 Comments | This entry was posted on Sep 02 2009

Bu diyeceklerim red-hat bazlı distrolar içindir. Debian için de çok farklı değil.

Başlangıçta yani boot sonrası program mı çalıştırmak istiyorsunuz (mesela subversion deamon programı). O zaman tek yapmanız gereken “/etc/rc.d/rc.local” dosyasına gerekli satırı eklemek.

Mis gibi

Dinodream.com altın örümcek birincisi

0 Comments | This entry was posted on Jun 09 2009

Altın örümcek 2008′de dinodream.com ile Topluluk/Sosyal iletişim dalında birincilik aldık. Bu benim ilk kazandığım altın örümcek ödülü olduğu için ayrı bir anlamı var. Gerçekten içime sinen bir proje olmuştu ve kesinlikle hakederek kazandık. Geliştirme sürecinde beraber çalıştığımız Murat’a da burdan teşekkürlerimi sunarım. Ödülü kendisi ile teslim aldık. Hatta röportaj bile verdik :)

Bir de belirtmek istiyorum: ödül töreni organizasyonu baya kötüydü.

YSlow performance guide

0 Comments | This entry was posted on Apr 12 2009

Her zaman gerekli olan bu best 20 practise’i buraya koyuyorum ki hep önümde olsun

Dinodream.com altın örümcek’de finalist

0 Comments | This entry was posted on Apr 12 2009

Daha önce php design / arcitecture ve kodlamasını yaptığım, js’lerini de yazdığım dinodream.com altın örümcek de finalist olmuş. başarılar diliyorum.

thepiratebay ip adresleri

0 Comments | This entry was posted on Feb 10 2009

Bu siteden nefret etmiş telekom. Girmek için gerçekten çabalamam gerekti. Ancak işbu aşağıdaki liste hosts dosyasına eklenmez suretiyle giremeyen, erişemeyen arkadaşlara ilaç gibi gelecektir. Buradan da amme tesisi görevi görüyorum.

83.140.65.11 thepiratebay.org
83.140.65.11 www.thepiratebay.org
83.140.65.11 thepiratebay.com
83.140.65.11 www.thepiratebay.com
83.140.65.11 static.thepiratebay.org
83.140.65.11 torrents.thepiratebay.org