Dunit ile test projesi oluşturmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Dunit ile test projesi oluşturmak

Mesaj gönderen aslangeri »

s.a. arkadaşlar.
yazdığım ufak bir programda dunit ile test yapmak istedim.
test projesini oluşturdum.
projedeki tüm unitleri test projesine ekledim.
uniti seçip new test module diyorum.
unit içindeki procedure ve fonksiyonlar için test procedureleri oluşturuyor.
buraya kadar ok.
ancak bir proceduri test etmek için o ilgili formun create edilmiş olması lazım.
procedure kendi içinde alt procedurelere ayrılıyor. bu procedureyi test etmek için orjinal proceduredeki kodları aynen yazıp gerekli yerlere test kodlarını koymalıyımıyım yoksa sadece procedureyi çalıştırıp yapması gereken işleri yapıp yapmadığını kontrol mu etmeliyim.
procedureyi çağırdığımda formlar create edilmemiş olduğ için sıkıntı çıkıyor.
formu manuel creat edip geri free mi etmeliyim. yoksa devreye mock(yanlışsa düzeltin mock=formun görüntü olarak tasarlanmış hali) formlar mı kullanmalıyım doğrusu kafam biraz karıştı.

her procedure test edilmeli mi?
procedurenin test edilmesi gerekip gerekmediğini neye göre belirleyeceğim. vs.vs.vs.
:?:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
cappy2005
Üye
Mesajlar: 35
Kayıt: 30 Kas 2005 02:42

Mesaj gönderen cappy2005 »

Bende DUnit ile uğraşmaya yeni başladım ama kesinlikle harika bir şey ilgi duyanlar mutlaka bir denemeli diye düşüyorum.

Benim anlamadığım yer test projesini yeni bir application olarak mı başlatıcaz yoksa mevcut application a yeni bir unit ekleyip bu unit imi test işlemlerini yazmak için kullanıcaz?
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
DUnit delphi kurulumuyla birlikte geliyormu, nasıl bir şey bu,biraz daha bilgi verirmisiniz rica etsem?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

dunit sonradan ekleniyor. burdan faydalanabilirsin.
http://dunit.sourceforge.net/
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

@aslangeri,

Dunit içinde test olarak neler yapman gerekiyorsa tamamını sen yazıyorsun, sadece olmasını istediğin koşulların doğruluğunu veya yanlışlığını Dunit metodlarını kullanarak test ediyorsun ki o sana rapor verebilsin.

Unit testing, nesne tabanlı programlama için uygulanabilir bir kavram. Eğer Dunit kullanarak test yazamıyorsan, bu test etmek istediğin kod bloğunu parçalara bölmen gerektiğin anlamına gelir. Kodu parçalara bölmeye çalış.

Pratik olarak genellikle önce testler yazılır sonra kod yazılır. Zaten eğer sorunsuz bir şekilde test yazabiliyorsan, tasarladığın yapı yeterince iyidir ve sen yazdığın o testlere uygun kodu yazmaya başlarsın.

Bir de testler ayrı bir proje olmalı. Test edilecek kod arasına test yazmamalısın.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

t-hex yazdı: Dunit içinde test olarak neler yapman gerekiyorsa tamamını sen yazıyorsun, sadece olmasını istediğin koşulların doğruluğunu veya yanlışlığını Dunit metodlarını kullanarak test ediyorsun ki o sana rapor verebilsin.
buraya kadar tamam.
t-hex yazdı: Unit testing, nesne tabanlı programlama için uygulanabilir bir kavram.
Kendim nesne oluşturmuş falan değilim. Bir form var ve arkada yazdığım kodlar procedurelere ve fonks. bölünmüş halde.
t-hex yazdı: Eğer Dunit kullanarak test yazamıyorsan, bu test etmek istediğin kod bloğunu parçalara bölmen gerektiğin anlamına gelir. Kodu parçalara bölmeye çalış.
dediğim gibi kodu procedure ve fonk. böldüm. ancak bir procedurenin içinde birden fazla alt proc ve fonk. var. Bu alt proc ve fonk nasıl test edebilirim. Aynı kodları tekrar test projesinemi yazacağım. (bunu böylemi yapılıyor anlamında soruyorum)
t-hex yazdı: Pratik olarak genellikle önce testler yazılır sonra kod yazılır. Zaten eğer sorunsuz bir şekilde test yazabiliyorsan, tasarladığın yapı yeterince iyidir ve sen yazdığın o testlere uygun kodu yazmaya başlarsın.
sanırım sıkıntının esas nedeni burası. Testlere sonradan başlayınca böyle oluyor.
t-hex yazdı: Bir de testler ayrı bir proje olmalı. Test edilecek kod arasına test yazmamalısın.
Testler için dunit ayrı bir proje oluşturdu. test etmek istediğim unitler için ayrı bir modul oluşturuyorum. onları testprojesine ekliyorum.

Son olarak iki noktanın altını tekrar çizmek istiyorum.
1. Önce testleri sonra kodları yazmak lazım.
2. Projede kendim nesne oluşturmadığım için nasıl test yapacağım konusunda zorlanıyorum.

teşekkür ederim arkadaşlar.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
cappy2005
Üye
Mesajlar: 35
Kayıt: 30 Kas 2005 02:42

Mesaj gönderen cappy2005 »

aslangeri yazdı: .....
Testler için dunit ayrı bir proje oluşturdu. test etmek istediğim unitler için ayrı bir modul oluşturuyorum. onları testprojesine ekliyorum.

Son olarak iki noktanın altını tekrar çizmek istiyorum.
1. Önce testleri sonra kodları yazmak lazım.
2. Projede kendim nesne oluşturmadığım için nasıl test yapacağım konusunda zorlanıyorum.
.....
Merhabalar bende testleri belli gruplara göre ayrı ayrı unitler olarak kodluyorum örnegin aritmetik işlemlerle ilgli testleri bir TAritmetik sınıfı oluşturup onun içinde, yada StringList gibi create ve free etmem gereken nesneler varsa bunun için farklı bir sınıf oluşturup bunlarıda farklı unitler içinde kodluyorum.

Daha yeni yeni bu konu ile uğraşıyorum ama anladığım kadarıyla test yazmak demek aslında çok farklı bir olay değil test yazıyorum dediğim metodun içindeki test raporları oluşturmak için gereken check metodlarını kaldırsan sana zaten metodun kendisi kalıyor. Sanırım bu sebeble haklı olarak insanlar şunu görmüş, test yazmak aslında metodun kendini yazmak gibi o sebeble önce testleri yazmak en mantıklı yaklaşım.

Ancak aklıma takılan başka sorularda var (Cahilliğimi maruz görün ögreniyorum henüz) Bu konuları ilk araştırmaya başladığımda test programlarının benim fonksiyon ve prosedürlerime ilgili değişkenleri göndererek test yaptığını düşünmüştüm (biraz hayalciyim galiba..) ama şimdi DUnit ile görüyorum ki konu daha farklı bir yaklaşımla gerçekleştirilmiş ayak uydurmak çok zor değil ama sanırım bu yapıyı en yüksek verimle kullanmak OOP tarzı programlama yapmayı gerektiriyor. Yoksa kodun bir kısmı butonda bir kısmı OnChange de bir kısmı OnSelect te gibi dağıtışmış bir kod haritasında testlerinde pek başarılı olacağını sanmıyorum çünkü böyle bir yapıyı test ortamından aktarmak büyük bir sorun olabilir bence tabi karşı fikri olan varsa ve mümkünse açıklama ile yazarsa sevinirim.

Son olarak öğrenmek adına bir cümle ile bitirelim. DUnit ile veritabanı bağlantılı metodları nasıl test edebiliriz birde Check metodu aşarı yüklenmiş bir metod (overload) sanırım diğer Check metodlarının görevi nedir?

Son olarak bir kaynak türkçe açıklamalı http://axtelsoft.com/delphi/dunit/dunittr.zip
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

baslangic olarak viewtopic.php?t=3924
viewtopic.php?t=13573

burdan baslaminizi oneririm.

http://www.cs.hacettepe.edu.tr/~turgay/ ... torial.pdf

bu adreste dunitin java platformunda kullanilan agabeyi icin aciklamalar ve ornekler mevcut.

tdd, dunit, test drevin development , TTestCase, test first, junit, nunit gibi kelimelerle googledan bircok belgeye ulasilabilir.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
cappy2005
Üye
Mesajlar: 35
Kayıt: 30 Kas 2005 02:42

Mesaj gönderen cappy2005 »

Merhaba,

TTestCase yazıp http://www.gogle.com sitersinde aradım işte şaşırtıcı sonuçlar.

Google' de Türkçe sayfalar 'da arama sonuçları
TTestCase için, Türkçe dilindeki yaklaşık 13 sonuç

Google' de Web' de arama sonuçları
TTestCase için yaklaşık 2.030 sonuç

Ayrıca Türkçe sayfalarda 13 sonuç diyor ama 5 tane listeliyor.Bu 5 sonuçtada yazara bakarsanız sadettinpolat oldugunu görürsünüz :)

Buradan çıkan sonuç acilen ingilizcemi ilerletmen gerek yada sadettinpolat'ı bulup makale yazması için tehdit mi etmeli acaba :)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

@Sadettin olum artık kaçışın kalmadı.
Artık yazdığın kodların testinide istiyorum. Hem kullan hem bizede kullandırt.
:twisted: :twisted:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

cappy2005 yazdı: sadettinpolat'ı bulup makale yazması için tehdit mi etmeli acaba :)
:shock: :shock: :shock: :shock: :shock:

bu test konusunda daha fazla bilgi almak icin yahoo da ki yazilimmuhendisligiturkiye mail grubunun arsivini kurcalayabilir, aklina takilian sorulari orda da sorabilirsin. mesela su an bu testlerle ilgili guzel bir tartisma hali hazirda devam ediyor. :)

http://www.nabble.com/Automated-Softwar ... 58118.html


http://tech.groups.yahoo.com/group/Yazi ... giTurkiye/

aslangeri yazdı:@Sadettin olum artık kaçışın kalmadı.
kacmak isteyen yok ama malum durumlari biliyorsun :)

konuyla ilgili olarakta sunlari soyliyebilirim.

aslangeri yazdı:bu procedureyi test etmek için orjinal proceduredeki kodları aynen yazıp gerekli yerlere test kodlarını koymalıyımıyım yoksa sadece procedureyi çalıştırıp yapması gereken işleri yapıp yapmadığını kontrol mu etmeliyim.
prosedur ve fonksiyonlara ait hicbir kodun test kodlarinda yer almamasi gerekir.test kodlarinda sadece fonksiyonlarin geriye donderdigi degerlerin dogru olup olmadigini, prosedurlerin ise yapmasi gereken isleri dogru yapip yapmadigini test etmen lazim.
aslangeri yazdı: procedureyi çağırdığımda formlar create edilmemiş olduğ için sıkıntı çıkıyor.
test edilecek verilerin barindigi sinif ve formlari dogal olarak create etmek gerekiyor. gorsel olmayan nesneler kolay oluyor ama TForm, TListbox gibi bilesenleri olusturmak icin kodla biraz hamallik yapmak gerekiyor. bazende anlamsiz hatalar verdigi oluyor. mesela http://www.delphiblog.net/2006/10/29/14 ... yse-varim/ burda Tcombobaxa bi turlu item ekleyemedim. normalde calisan kod test metodunun icerisinde hata verip durdu. bende mecburen ilgili satirlari parantez icerisine alarak kapatmak zorunda kaldim.

DUnit klasorunun icerisinde DUnit in kendi birim testleri mevcut. test projesini derleyip calistirmanizi oneririm. test kodlarindan bazilari Dunit formlarini Create ediyor, uzerindeki editlere bazi degerler girip kontrol yapiyor. kodlari anlamak biraz zor olabilir belki ama izlemesi gayet eglenceli :)

aslangeri yazdı: her procedure test edilmeli mi?
genelde nesnenin disariya acilan(public, published) arayuzundeki metod ve fonksiyonlarin test edilmesi yeterlidir ama daha fazla denetim ve kontrol isterseniz private ve protected metodlarda test edilebilir. aslinda public metodlar yeterince iyi test edilirse private ve protected metodlara test yazilmazi biraz gereksiz gibi duruyor. sonucta bu metodlar public metodlarin icerisinden cagriliyor.
aslangeri yazdı: procedurenin test edilmesi gerekip gerekmediğini neye göre belirleyeceğim
en zor soru bu işte :) testler kaynak kodun sigortasi gibidir. birgun biryerlerde birseyler yanlis giderse kolayca farkina varabilmenizi saglar. bu yuzden en iyisi metodlari kafanizda bir onem sirasi olusuturup buraya yerlestirmek ve en onemliden baslayarak asagiya dogru test kodlarini tamamlamak. tabi bu varolan bir kod varsa aksi takdirde once test sonra metod kurali gecerli :)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

cappy2005 yazdı: Son olarak bir kaynak türkçe açıklamalı http://axtelsoft.com/delphi/dunit/dunittr.zip
sonradan aklima geldi. bu belge Dunit'in readme dosyasinin turkceye cevrilmis halidir. istegim uzerine bu dosyayi turkceye ceviren bekir taha arkasima da burdan tekrar tesekkur edeyim :)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla