in Go

Go Programlama Dilinde Table Driven Test

Kaliteli ve kapsayıcı testler yazmak biraz zaman alabiliyor. Çoğu zaman her koşul için test yazmaya çalışırken, bir bakıyorsun kopyala/yapıştır ile aynı sınama mantığına sahip onlarca test sarmış her tarafı (DRY‘e selam olsun).

Ee burada, TDD’nin “en hızlı ve en kirli şekilde testi yaz sonra devam et” tavsiyesini nereye koyacağız?

Gel gelelim bu duruma gönül razı olmuyor Test’i refactor edip fonksiyonlara bölüp bir şekilde teknik borcumuza sadık kalıyoruz. Bakım ve verimlilik diplerde gidiyor.

tabi development’ta verimlilik takıntıları’da durur mu? Hemen yapıştırmışlar cevabı: Table Driven Test, daha doğrusu Keyword-driven testing.

Aynı doğrulama ve çıktı sınama mantığına sahip testleri parametrize edip tek bir fonksiyona indirgemeye yarayan bir yaklaşım. Uzun uzun anlatmayalım. Pratik olalım.

Öncelikle kötü yaklaşımı gösterelim.

Görüldüğü gibi her bir girdi için yeni bir test fonksiyonu yazdık ve kendimizi tekrar ettik, moralimiz bozuldu. Ama sonuçta iyi-kötü kodu doğruladığımız bir şeye sahip olduk diyebiliriz fakat bu yapıda senaryolar arttıkça test yönetiminin kısa sürede baş edilemez hale geleceğini görmek pek zor değil. Kırık Camlar Teorisini bize zaten bunu kanıtlıyor. (Takımdan sivrinin biri bunu savunursa buradan yürüyün…)

Şimdi makbul olana bakalım. Yani gopher gibi davranalım.

Öncelikle test yüzeyinin ne kadar genişlediğini görmüşsünüzdür! Basit bir anonim struct kullanarak düşünebildiğimiz tüm koşullar için birer eleman ekledik ve beklenen davranışı sınayacağı bir döngüde kontrolü sağladık.
Yeni bir senaryo ihtiyacında test kodunu hiç ellemeden direkt tablo’nun içine yeni bir input ve expected değeri ekleyerek artık genişleyebilir bir yapı ile verimliliği sağladık ve günü kurtardık.

Bonus – 1

Bu yazıya esin kaynağı olan projeye ve test kodlarına https://github.com/c1982/yaziya adresinden ulaşabilirsiniz. Basitçe Go kullanılarak geliştirilmiş Rakamı yazıya çeviren paket.

Bonus – 2

HashiCorp‘un kurucusu Mitchell’in konu ile ilgili konuşmasını da izleyebilirsin.

Bu arada Table Driven Test’in feriştahını burada buldum.

Yorum Bırak

Comment