📝 Spec & Step Temelleri
Spec & Step Temelleri: Spec dosyası ile step implementation arasındaki ilişki, nota kağıdı ile piyanist arasındaki ilişkidir: nota kağıdı (.spec) NE çalınacağını satır satır söyl
Spec dosyası ile step implementation arasındaki ilişki, nota kağıdı ile piyanist arasındaki ilişkidir: nota kağıdı (.spec) NE çalınacağını satır satır söyler, piyanist (@Step metodu) her notayı NASIL basacağını bilir. Kritik mekanizma eşleşmedir: notadaki her sembolün piyanistin repertuarında birebir karşılığı olmalıdır — Gauge, spec'teki step cümlesini @Step("...") annotation metniyle KARAKTER KARAKTER eşleştirir; "Kullanıcı giriş yapar" ile "Kullanici giriş yapar" farklı iki step'tir. Peki neden Gauge bulanık (fuzzy) eşleştirme yapmıyor — "yaklaşık aynı" cümleyi kabul etse daha pratik olmaz mıydı? Olmazdı: test otomasyonunda belirsizlik en pahalı şeydir; "hangi metodun koşacağı" tahmine dayansaydı, yanlış implementasyonun sessizce koşması mümkün olurdu. Java'daki karşılığı method overload resolution'dır: derleyici çağrının hangi metoda gideceğini kesin kurallarla belirler, "en yakın isimli metodu çağırayım" demez. QA bağlamında bu katılık senin lehinedir: spec'te bir kelime değiştiğinde test sessizce yanlış metodu koşturmak yerine "Step implementation not found" ile kırılır — yanlış PASS'ten (en tehlikeli test sonucu) seni korur.
📄 Spec Dosyası Anatomisi
Bir .spec dosyası üç seviyeden oluşur: # ile başlayan tek bir Specification başlığı (dosya başına bir tane), ## ile başlayan Scenario başlıkları (her biri bağımsız bir test) ve * ile başlayan step satırları. Specification başlığının hemen altındaki * step'ler "context step" olur: o dosyadaki HER senaryodan önce koşarlar — Java'daki @BeforeMethod'un spec-içi karşılığıdır. Çift tırnak içindeki değerler ("admin" gibi) otomatik parametre olur.
Adım Adım: Context Step vs Scenario Step
# başlığının hemen altı
Specification başlığının altına konan * satırları "context step" olur.
Context step HER senaryodan önce koşar
Java'daki @BeforeMethod'un spec-içi karşılığıdır — dosyadaki tüm senaryolar için otomatik çalışır.
Scenario başlığı altındaki * satırları SADECE o senaryoya özeldir, bağımsız çalışır.
Her senaryoya tekrar tekrar kopyaladığın ortak bir adım varsa (örn. "sayfayı aç"), context step'e taşı.
Micro Lab: Gauge spec-step zinciri kurma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
☕ Step Implementation: @Step Annotation'ı
Spec'teki her * satırı, Java tarafında @Step annotation'lı bir metoda bağlanır. Spec'te çift tırnakla yazılan değer, annotation metninde yer tutucusuna denk gelir ve metoda argüman olarak akar. Java karşılaştırması: TestNG'de @Test metodunun adı serbesttir ve veriyi @DataProvider'dan alırsın; Gauge'de metot adı yine serbesttir ama BAĞ, annotation metni üzerinden kurulur — metodu yeniden adlandırabilirsin, spec kırılmaz; annotation metnini değiştirirsen spec kırılır.