Biri bizi gozetliyor! adinda daha onceden bir yazi yazmistik ve testlerini de ileriki zamanlarda burda inceleyecegimizi belirtmistik. Gordugunuz uzere sozumuzu tutuyoruz ve testlerimizi incelemeye basliyoruz. :)
Hatirlayacaginiz uzere projede iki temel sinifimiz vardi. Bi tanesi TAbstractIzlenenBilesen digeri ise TIzleyici adli siniflarimiz. TAbstractIzlenenBilesen adli nesnemizden de tureyen 4 tane daha sinifimiz var.

Testlerimizi yazmaya nerden baslamaliyiz?

Dogal olarak ilk once DUnit ile test unitini ve test edecegimiz siniflarin tanimlamalarini olusturmaliyiz. Bu yazida bu kisimi anlatmayacaz. ikinci olarakta soyut siniflar icin test yazmamiza gerek yok daha dogrusu soyut siniflar da bazi metodlar olmadiigi icin saglikli bir test yapmamiz olanaksiz gibi birsey. Aslinda gereksiz de zira zaten bu soyut siniftan tureyen diger siniflari test ettigimizde bu soyut sinifida dolayli olarak test etmis oluyoruz.

Simdi TIzlenenTEdit, TIzlenenTCheckBox, TIzlenenComboBox, TIzlenenTSpinEdit siniflarimiz icin testlerimizi sirasiyla yazmaya basliyoruz. Hemen hemen butun siniflar icin

procedure SetUp; override;
procedure TearDown; override;

metodlarina ihtyacimiz oldugu icin bunlari baslarindaki // isaretleri kaldirarak aktif hale getiriyoruz. Bu metodlarda bilesen test ortamina girmeden ve test ortamindan ciktiktan sonra gerekli olan islemleri yapmak icin kullaniyoruz. Bilesen yaratmak, dosya okumak vs. vs igib islemler icin…

TIzlenenEditTests sinifimiz icin procedure TestIzlenenBilesendeDegisiklikVarMi;
metodunu yazmaya baslayalim. Bundan once yapmamiz gerekenler ise soyle…

Bu sinif TEdit siniflarini izledigi icin bize bir adet TEdit sinifina ait bir nesne lazim. Bunu ilgili sinifimizin Private kisminda tanimliyoruz. hemen altina ise bir tane de TIzlenenTEdit tipinde bir nesne tanimliyoruz. Ardindan SetUp; metoduna gidip TEdit sinifini Create ediyoruz.

inherited;
fEdit :=TEdit.Create(nil);
fEdit.Name :='myEdit';
fEdit.Text :='sadettin';

sira geldi TestIzlenenBilesendeDegisiklikVarMi metoduna. Bu metoda gelip ilk once fIzlenenTEdit nesnemizi create ediyoruz ve izlenecek olan TEdit olarakta SetUp metodunda olusturdugumuz fEdit nesnesini parametre olarak geciyoruz ve hemen ardindan ilk testimizi yapiyoruz.

Check(fIzlenenTEdit.IzlenenBilesendeDegisiklikVarMi = false , 'TEdit_IzlenenBilesendeDegisiklikVarMi Hatalı_1');

fEdit uzerinde henuz herhangi bir islem yapmadigimiz icin metodun bize False degeri dondurmesi lazim. eger false dondurmezse ekranda kirmizi bir isik ve TEdit_IzlenenBilesendeDegisiklikVarMi Hatalı_1 mesaji alacaz :)
DUnit icerisinde bu sekilde test yapmak icin kullanabileceginiz cesitli Check (yaklasik 30 tane) metodlari tanimli. (CheckTrue, CheckNull, CheckException vs. vs) testiniz icin uygun olan bir tanesini kullanmaniz gerekiyor. Burdaki tesste Check bizim isimizi goruyor.

Bilesen ilk olusturuldugunda dogru calisiyor yani geriye false degeri donderiyor. peki fEdit nesnesinde bir degisiklik oldugu zaman dogru calisacak mi acaba diyip

fEdit.Text :='polat';

satiriyla fEdit nesnemizin text alanini degistiriyoruz ve hemen ardindan testimizi yapiyoruz.

Check(fIzlenenTEdit.IzlenenBilesendeDegisiklikVarMi = True , 'TEdit_IzlenenBilesendeDegisiklikVarMi Hatalı_2');

bu sefer sonucun True olmasi gerektigini soyluyoruz. Eger test sonucu True degilse yine kirmizi isik ve hata mesajimiz ekranda gorunuyor…

test isimiz bitince once fIzlenenTEdit bilesenin ardindan TearDown metodunda ise fEdit bilesenini yok ederek testimizi tamamliyoruz.

Diger IzlenenXXX siniflari icinda asagi yukari ayni seyler gecerli….

simdi TIzleyici sinifinin testlerine gecelim….

bu sinifin test etmemiz gereken 3 adet metodu var.

procedure BilesenlerdeDegisiklikVarMi;
procedure IzlenecekBilesenEkle;
procedure IzlenecekBilesenSil;

Oncelikle TIzleyiciTests sinifimizin Private bolumunde ilgili siniflarimizi tanimlayalimm.

TIzleyiciTests = class(TTestCase)
private
fIzleyici:TIzleyici;
fEdit:TEdit;
fCheckBox:TCheckBox;
fSpinEdit:TSpinEdit;
// fComboBox:TComboBox; //buna henuz bakamadim..
protected

ardindan da SetUp ve TearDown metodlarinda test icin gerekli ortam bilesenlerini olsuturalim.

procedure TIzleyiciTests.SetUp;
begin
inherited;
fIzleyici:=TIzleyici.Create;

fEdit :=TEdit.Create(nil);
fEdit.Name :='myEdit';
fEdit.Text :='edt';

fCheckBox :=TCheckBox.Create(nil);
fCheckBox.Name :='myCheckBox';
fCheckBox.Checked :=True;

{ fComboBox :=TComboBox.Create(nil);
fComboBox.Name :='myComboBox';
fComboBox.Text :='ComboBox';
fComboBox.Items.Add('1');
fComboBox.Items.Add('2');
fComboBox.ItemIndex :=0; }

fSpinEdit :=TSpinEdit.Create(nil);
fSpinEdit.Value :=5;
fSpinEdit.Name :='mySpinEdit';

end;

procedure TIzleyiciTests.TearDown;
begin
FreeAndNil(fEdit);
FreeAndNil(fSpinEdit);
FreeAndNil(fCheckBox);
FreeAndNil(fizleyici);
inherited;
end;

simdi sira TIzleyiciTests.TestBilesenlerdeDegisiklikVarMi; metodunu yazmaya geldi.

oncelikle SetUp da olsutrdugumuz nesneleri ilgili nesnemize ekliyorum.

fIzleyici.IzlenecekBilesenEkle(fEdit);
fIzleyici.IzlenecekBilesenEkle(fCheckBox);
fIzleyici.IzlenecekBilesenEkle(fSpinEdit);

ve hemen ardindan Degisiklik var mi diye test ediyorum.

Check(fIzleyici.BilesenlerdeDegisiklikVarMi = False,'TIzleyiciTests.TestBilesenlerdeDegisiklikVarMi hatalı_1');

henuz her hangi bir degisiklik olmadigindan sonucun false olmasi gerekiyor.

sonra fEdit bileseninn text alanini degistirip tekrar test ediyorum.

fEdit.Text :='sado';
Check(fIzleyici.BilesenlerdeDegisiklikVarMi = True,'TIzleyiciTests.TestBilesenlerdeDegisiklikVarMi hatalı_2');

ardindan fEdit ve fSpinEditin degerleriyle oynayip tekrar test ediyorum.

fEdit.Text :='edt';
fSpinEdit.Value :=10;
Check(fIzleyici.BilesenlerdeDegisiklikVarMi = True,'TIzleyiciTests.TestBilesenlerdeDegisiklikVarMi hatalı_3');

ve bu surec beni tatmin edene kadar devam ediyor :)
simdi sira TIzleyiciTests.TestIzlenecekBilesenEkle metounda.

metodun var bolumunde asagidaki sekilde nesneleri tanimliyorum.

procedure TIzleyiciTests.TestIzlenecekBilesenEkle;
var
TestEdit:TEdit;
TestSpinEdit:TSpinEdit;
TestCheckBox:TCheckBox;
begin

ve sonra

TestEdit :=TEdit.Create(nil);
TestEdit.Name :='sado';
fIzleyici.IzlenecekBilesenEkle(TestEdit);

TIzlenenTEdit tipindeki TestEdit nesnesini olusturup fIzleyici ye ekliyorum. NŞA’ da en son TestEdit nesnesini ekledigimden dolayi fIzleyici.IzlenenBilesenler.Last metodu TIzlenenTEdit tipinde bir sinifa referans ediyor olmali. bende

Check(fIzleyici.IzlenenBilesenler.Last is TIzlenenTEdit,'TIzleyiciTests.TestIzlenecekBilesenEkle Hatalı_1');

satiriyla bu durumu kontrol ediyorum.

sonra fizleyiciye eklenen nesnenin adinin sado olup olmadigini kontrol ediyorum.

Check((fIzleyici.IzlenenBilesenler.Last as TIzlenenTEdit).GetIzlenenBilesenName = 'sado' ,'TIzleyiciTests.TestIzlenecekBilesenEkle Hatalı_2');

testimi tamamladiktan sonra TestEdit nesnesini yok ediyorum.

FreeAndNil(TestEdit);

ayni sureci diger siniflar icinde tekrar ediyorum.

TIzleyiciTests.TestIzlenecekBilesenSil metoduna gelince.

pespese iki tane izlenecek bilesen olsturuyorum ve bunlari izlenecekler listesine ekliyorum.

TestEdit :=TEdit.Create(nil);
TestEdit.Name :='sado';
fIzleyici.IzlenecekBilesenEkle(TestEdit);

TestSpinEdit :=TSpinEdit.Create(nil);
TestSpinEdit.Name :='sado2';
fIzleyici.IzlenecekBilesenEkle(TestSpinEdit);

ve son ekledigim TestSpinEdit nesnesini izlenecekler listesinden cikartiyorum.
fIzleyici.IzlenecekBilesenSil(TestSpinEdit);

fIzleyici.IzlenenBilesenler.Last metodunun NŞA ‘ da TIzlenenTEdit tipinde bir sinifa isaret etmesi gerekir diyorum ve bunu test ediyorum. isi saglama almak icin bir de nesnenin adini da kontrol ediyorum.

Check(fIzleyici.IzlenenBilesenler.Last is TIzlenenTEdit,'TIzleyiciTests.TestIzlenecekBilesenSil Hatalı_1');
Check((fIzleyici.IzlenenBilesenler.Last as TIzlenenTEdit).GetIzlenenBilesenName = 'sado' ,'TIzleyiciTests.TestIzlenecekBilesenSil Hatalı_2');

yine bu sureci beni dogru calisiyorum diye ikna edinceye kadar bir iki nesne ekleme, silme islemleri yapip test ediyorum ve bu yazinin da sonuna geliyorum. :)

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>