Test fixture, bir testin üzerinde çalıştığı sabit veri kümesidir; kimlik verisi söz konusu olduğunda bu küme, kaydın bütün alanlarını taşır. Bu yazıda sabit bir kümenin neden rastgele üretimden daha güvenilir olduğunu, kayıtların nasıl adlandırılması gerektiğini ve kümenin zamanla nasıl eskidiğini bulacaksınız.
Fixture nedir ve neden sabit bir örnek gerekir?
Bir otomatik test, çalıştığı veriyi ya dışarıdan alır ya da kendi içinde üretir. Fixture yaklaşımı birinci yolu seçer: test, üzerinde çalışacağı kaydı önceden tanımlanmış bir dosyadan okur. Böylece testin girdisi her çalıştırmada aynı kalır.
Bu sabitliğin ilk faydası, hatanın tekrar üretilebilmesidir. Bir test kırmızıya döndüğünde, üzerinde çalıştığı kaydı bilmek gerekir; aksi hâlde aynı hatayı yeniden görmek için aynı koşulları yeniden kurmak imkânsızlaşır. Sabit bir kümede kaydın kendisi değişmediği için, hatanın kaynağı yalnızca kod olabilir.
İkinci fayda, testin neyi sınadığının okunabilmesidir. Kaydın içine bakıldığında hangi sınırın denendiği anlaşılır: uzun bir isim mi, ayraçsız bir telefon mu, artık yıl tarihi mi? Rastgele üretilen bir kayıtta bu niyet kaybolur; test çalışır ama neden çalıştığı belirsiz kalır.
Üçüncü fayda, veri kaynağının güvenli olmasıdır. Fixture dosyası elle ya da sentetik üretimle hazırlanır; içinde gerçek bir kişinin bilgisi bulunması gerekmez ve bulunmamalıdır. Kaydın kurgusal olduğunu belirten bir etiket taşıması, dosyanın başka bir ortama kopyalanması durumunda yanlış anlaşılmayı önler.
Kayıtlar hangi adlandırmayla düzenlenir?
Fixture içindeki kayıtları numaralandırmak yerine amaca göre adlandırmak, kümenin uzun vadede kullanılabilir kalmasını sağlar. Bir kaydın adı, hangi senaryoyu temsil ettiğini söylemelidir.
- Mutlu yol: Bütün alanları geçerli ve birbiriyle tutarlı kayıt.
- Eksik alan: İsteğe bağlı bir alanın boş bırakıldığı kayıt.
- Uzun değer: Alınabilecek en uzun ad ve en uzun adres satırı.
- Kısa değer: Tek harfli ad, tek haneli sokak numarası.
- Ülke dışı biçim: Aynı alana başka bir ülkenin biçiminin yazıldığı kayıt.
- Sınır tarih: Doğum günü tam bugün olan ya da artık yıl tarihine denk gelen kayıt.
Bu adlar, testin kendisini de belgeye dönüştürür. Yeni bir ekip üyesi dosyayı açtığında hangi davranışın sınandığını anlar ve yeni bir senaryo eklerken hangi boşluğun kaldığını görebilir. Adlandırılmamış kayıtlar ise zamanla kimsenin dokunmaya cesaret edemediği bir birikime dönüşür.
Hangi sınır örnekleri mutlaka bulunmalı?
Sınır örnekleri, gerçek hayatta seyrek görülen ama kodu en çok kıran durumlardır. Kimlik kaydı söz konusu olduğunda hazırlanması gereken örnekler sınırlıdır ve çoğu tek bir kayıtla temsil edilebilir.
| Örnek | Neyi sınar | Neden gerekli |
|---|---|---|
| Çok yaşlı kişi | Yaş hesabı ve tarih aralığı | Yüzyılı aşan kayıtlar aralık denetimini kırar |
| Çok uzun ad | Alan uzunluğu ve görüntüleme | Kırpma ve taşma hatalarını gösterir |
| Soyadı olmayan kişi | Zorunlu alan kuralları | Tek adlı kişileri sessizce reddeden kuralı bulur |
| Latin harfi dışı ad | Kodlama ve sıralama | Arama ve büyük harf dönüşümünü sınar |
| Ayraçsız telefon | Ayrıştırma | Ülke kodu olmadan gelen girdiyi dener |
| Boş isteğe bağlı alan | Koşullu doğrulama | Alanın zorunlu sanılmasını engeller |
Tablodaki her satır, tek bir kaydın içinde değil ayrı kayıtlar hâlinde bulunmalıdır. Bir kayıtta birden fazla sınır ihlali birleşirse, test kırmızıya döndüğünde hangi kuralın tetiklendiği anlaşılmaz; bu da hatayı bulmayı zorlaştırır. Bu ilkenin genel çerçevesini test kimlik verisi yazısında ele alıyoruz.
Rastgele üretim neden hatayı tekrar edilemez kılar?
Her çalıştırmada yeni kayıt üreten bir test, kırmızıya döndüğünde elinizde yalnızca o anki çıktı kalır. Hatayı araştırmak için testi yeniden çalıştırırsınız ve bu kez başka bir kayıt üretilir; sorun kaybolabilir ya da farklı bir biçimde geri gelebilir. Bu tür hatalar “kararsız test” olarak bilinir ve ekiplerin en çok zaman kaybettiği alanlardan biridir.
Rastgele üretimin büsbütün terk edilmesi de doğru değildir. Geniş kapsamlı tarama, çok sayıda farklı kaydın denenmesini gerektirir; elle hazırlanmış bir küme bu iş için küçük kalır. Doğru denge, ikisini farklı amaçlarla kullanmaktır: tekrarlanabilir olması gereken testler sabit kayıtlarla, kapsamı genişletmek isteyen taramalar ise üretilmiş kayıtlarla çalışır.
Bir hata yalnızca rastgele üretimde ortaya çıkarsa, yapılacak iş o kaydı yakalayıp fixture kümesine eklemektir. Böylece hata bir kez bulunmuş olmaktan çıkar, kalıcı bir teste dönüşür. Bu dönüşümü yapmak, üretilmiş kaydı çalıştırma çıktısından kopyalamakla başlar.
Sitenin ürettiği kayıtlar bu iş için uygundur: tek bir kimlik anahtarı verildiğinde aynı kişi her zaman aynı alanlarla geri gelir, böylece kaydı dosyaya yazıp yıllar sonra yeniden açabilirsiniz. Üretilen kayıtların gerçek bir kişiye karşılık gelmediğini ve yalnızca test amaçlı olduğunu, kimseyi taklit etmek için kullanılamayacağını burada bir kez daha belirtelim.
Bir fixture zamanla nasıl eskir?
Fixture dosyaları kendiliğinden bozulmaz ama bağlı oldukları dünya değişir. Bu sürece genellikle fixture çürümesi denir ve birkaç farklı biçimde ortaya çıkar.
Birinci biçim, geçerliliğini yitiren varsayımdır. Bir ülkenin numara biçimi değiştiğinde, o ülkeye ait sabit kayıt artık gerçek kuralları temsil etmez. Test hâlâ geçer, çünkü kod eski biçimi kabul etmeye devam eder; ama gerçek kullanıcılar yeni biçimle geldiğinde hata çıkar.
İkinci biçim, sabitlenmiş tarihlerdir. Fixture içinde yaş sınırına tam denk gelen bir doğum tarihi varsa, o kayıt yıllar geçtikçe sınırı aşar. Bir gün test beklenmedik biçimde kırmızıya döner ve kimse nedenini anlamaz. Tarihe bağlı testlerde referans anı sabitlemek bu sorunu tamamen ortadan kaldırır.
Üçüncü biçim, terk edilmiş kayıtlardır. Artık hiçbir testin kullanmadığı bir kayıt dosyada kalır, zamanla güncellenmez ve gerçek dışı bir hâle gelir. Kümenin belirli aralıklarla gözden geçirilmesi, hem bu tür kayıtları temizler hem de yeni sınır durumlarının eklenmesini sağlar.
Geliştiriciler için: fixture yapısı ve okunabilirlik
Fixture dosyasını okunabilir tutmak, uzun vadede en çok fayda sağlayan karardır. Her kayda kısa bir açıklama eklemek, kaydın hangi senaryoyu temsil ettiğini ve hangi davranışın beklendiğini belgeler. Bu açıklama, test kırmızıya döndüğünde ilk bakılacak yerdir.
Kayıt sayısını küçük tutmak da önemlidir. Yüzlerce kayıt içeren bir küme kimse tarafından okunmaz; on ya da yirmi iyi seçilmiş kayıt ise düzenli olarak gözden geçirilir. Kapsamı genişletmek gerektiğinde, kümeyi büyütmek yerine üretilmiş kayıtlarla çalışan ayrı bir tarama eklemek daha etkilidir.
Kayıtların ülke bilgisini açıkça taşıması gerekir. Hangi ülkeye ait olduğu yazılmayan bir kayıt, doğrulama kuralları ülkeye göre değiştiğinde yorumlanamaz hâle gelir. Aynı şekilde kaydın sentetik olduğunu belirten bir işaret, verinin hangi ortama kopyalandığından bağımsız olarak korunmalıdır.
Adres alanlarının fixture içinde nasıl düzenlendiğini adres verisi için test fixture yazısında ayrıca ele alıyoruz; iki konu birlikte okunduğunda kümenin bütünü daha net görünür. Üretim yöntemlerinin karşılaştırması için de çevrimiçi üreticiler ve kütüphaneler yazısı yol gösterici olabilir.
Sonraki adımlar
Fixture kümenizi gözden geçirirken her kaydın hangi senaryoyu temsil ettiğini tek cümleyle yazabiliyor musunuz diye sorun; yazamıyorsanız o kayıt büyük olasılıkla gereksizdir. Ardından eksik kalan sınır örneklerini ekleyin ve en az bir kaydı sınır tarihiyle kurun. Kendi kayıtlarınızı üretmek için kimlik üreticisi sayfasında ülke ve kimlik anahtarı seçip çıktıyı doğrudan kümenize taşıyabilirsiniz.