Önce test yazılıyor ardından asıl kod. Başlangıçta biraz kafa karıştıran bir ifade çünkü olmayan bir kodun testi nasıl yazılır? diye bir soru geliyor insanın aklına. YazilimMuhendisligiTurkiye grubundaki arkadaslar saolsun bu soruyu aydinlattilar

adımlar şöyle işliyor
1. İşleme başlıyoruz. İlk adımda yeşil ışığımız yanıyor.
2. Testimizi yazıyoruz
3. Testimizi çalıştırıyoruz. Ne test ettiğimiz fonksiyonun adı ne de sanı meydanda olmadığı için compiler syntax hatası veriyor. Işığın rengi burda sarı oluyor.
4. Test edilecek fonksiyonu tanımlıyoruz ama sadece gövdesini amaç undeclareded identifier hatasından kurtulmak

5. Testimizi çalıştırıyoruz. Henüz foksiyonumuz görevini doğru bir şekilde yerine getirmediğinden dolayı hata alıyoruz. bu da kırmızı ışık oluyor.
6. Şimdi fonksiyonun gövdesini doldurmaya başlıyoruz.
7. Testi yeniden çalıştırıyoruz. ta ki yeşil ışık yanana kadar...
Bu şekilde devam ettikten bir süre sonra elimizde ürün olarak nitelendirebileciğimiz asıl fonksiyonlarımız oluşmuş oluyor.
bundan sonra sesli düşünüyorum. Sizde bana katılabilirsiniz.
Faktöriyel hesaplayan bir fonksiyon yazmam lazım. Faktöriyeli lise yıllarında görmüştüm ama şimdi çok fazla bir bilgi kalmadı. Zaten çokta önemli değil. Bana lazım olan 3,5 sayının faktöriyeli. bunları döndüren bir fonksiyon yaptığım zaman olay bitmiştir

hemen bir proje oluşturuyorum, ardından dunit ile buna bir test projesi ekliyorum hemen ardından bir testuniti oluşturup ilgili uniti aşağıdaki şekilde düzenliyorum.
Kod: Tümünü seç
unit Unit1Tests;
interface
uses
Unit1,
TestFrameWork;
type
TMyTest = class(TTestCase)
private
protected
// procedure SetUp; override;
// procedure TearDown; override;
published
// Test methods
procedure TestFaktoriyel;
end;
implementation
{ TMyTest }
procedure TMyTest.TestFaktoriyel;
begin
Check(unit1.faktoriyel(1)=1,'faktöriyel yanlış çalışıyor bilader !');
end;
initialization
TestFramework.RegisterTest('Unit1Tests Suite',
TMyTest.Suite);
end.
[Error] Unit1Tests.pas(31): Undeclared identifier: 'faktoriyel'
hatası alıyoruz. çünkü faktoriyel diye birşeyimiz henüz yok.
SARI IŞIK
Unit1 e gidip faktoriyel adında bir fonkisyon tanımlıyorum. içinede abuk subuk bişeler yazıyorum.
Kod: Tümünü seç
//unit1.pas
function Faktoriyel(Sayi:Integer):Integer;
begin
result :=0; //maksat delphi hata vermesin :)
end;
TestFaktoriyel: ETestFailure at $00486A68 faktöriyel yanlış çalışıyor bilader ! hata mesajını alıyorum. Bu da KIRMIZI IŞIĞIMIZ oluyor. Bunu yeşil yapana kadar işleme devam ediyoruz. Yani fonksiyonu yazmaya başlıyoruz.
Şimdilik bana sadece belirli bazı sayıların faktöriyelleri lazım olduğundan öyle çok genel bir formul aramyorum. yazıyorum makineye istediğim sayıları, hesaplatıyorum faktöriyellerini

Kod: Tümünü seç
function Faktoriyel(Sayi:Integer):Integer;
begin
Case Sayi of
0: Result :=1;
1: Result :=1;
2: Result :=2;
3: Result :=6;
4: Result :=24;
5: Result :=120;
6: Result :=720;
7: Result :=5040;
8: Result :=40320;
9: Result :=362880;
else
Result :=0;
end;
end;
değil ama işimi görüyor

testimi çalıştırıyorum.... ohhhh ! paşalar gibi yeşil ışığım yandı. gurur duydum kendimle

tabi böyle test olur mu diyorsunuz? haklısınız hemen birkaç değerle daha test ediyoruz.
Kod: Tümünü seç
Check(unit1.faktoriyel(1)=1,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(5)=120,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(9)=362880 ,'faktöriyel yanlış çalışıyor bilader !');
denemelere devam....
Kod: Tümünü seç
Check(unit1.faktoriyel(10)=3628800 ,'faktöriyel yanlış çalışıyor bilader !');
Kod: Tümünü seç
function Faktoriyel(Sayi:Integer):Integer;
begin
if Sayi = 1 then Result := 1
else Result := Sayi * Faktoriyel(Sayi-1);
end;
Kod: Tümünü seç
Check(unit1.faktoriyel(0)=1,'faktöriyel yanlış çalışıyor bilader !');
Kod: Tümünü seç
if Sayi = 1 then Result := 1
Kod: Tümünü seç
if Sayi < 1 then Result := 1
bir iki test daha yapıp olayı noktalamak istiyorum.
Kod: Tümünü seç
Check(unit1.faktoriyel(15)=1307674368000,'faktöriyel yanlış çalışıyor bilader !');
fonksiyonun son şekli
Kod: Tümünü seç
function Faktoriyel(Sayi:Integer):Int64 ;
begin
if Sayi < 1 then Result := 1
else Result := Sayi * Faktoriyel(Sayi-1);
end;
son bir test ekliyorum.
Kod: Tümünü seç
Check(unit1.faktoriyel(19)=121645100408832000,'faktöriyel yanlış çalışıyor bilader !');
huzurlu bir şekilde save all diyip ide yi kapatıyor ve nargile içmeye gidiyorum...
test kodum ve bu kodlar sayesinde ortaya çıkan asıl kodum.
Kod: Tümünü seç
{ TMyTest }
procedure TMyTest.TestFaktoriyel;
begin
Check(unit1.faktoriyel(1)=1,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(0)=1,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(5)=120 ,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(9)=362880 ,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(10)=3628800,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(0)=1,'faktöriyel yanlış çalışıyor bilader !');
Check(unit1.faktoriyel(15)=1307674368000,'faktöriyel yanlış çalışıyor bilader 1!');
Check(unit1.faktoriyel(19)=121645100408832000,'faktöriyel yanlış çalışıyor bilader 2!');
end;
asıl kod
Kod: Tümünü seç
function Faktoriyel(Sayi:Integer):Int64 ;
begin
if Sayi < 1 then Result := 1
else Result := Sayi * Faktoriyel(Sayi-1);
end;