Integerlar

Bu bölümün bütün kodlarını burada bulabilirsiniz

Integerlar beklediğiniz gibi çalışır.Bir şeyler denemek için Add fonksiyonu yazalım.adder_test.go adında test dosyası oluşturalım ve bu kodu yazalım.

Not: Go kaynak dosyaları her dizinde sadece bir tane package a sahip olabilir, dosyalarınızı ayrı ayrı düzenlediğinizden emin olun. Burada bunu ile ilgili bir açıklama var.

İlk olarak test yaz

package integers

import "testing"

func TestAdder(t *testing.T) {
    sum := Add(2, 2)
    expected := 4

    if sum != expected {
        t.Errorf("expected '%d' but got '%d'", expected, sum)
    }
}

Stringleri formatlarken %q yerine %d kullandığımızı farketmişsinizdir. Bunun sebebi string yerine integer yazdırmak istememiz.

Ayrıca main paketini kullanmadığımızı da unutmayın, bunu yerine adından da anlaşılacağı üzere integers adında bir paket tanımladık. Integerlar ile çalışırken Add gibi fonksiyonları burada gruplandıracağız.

Dene ve testi çalıştır

Testi çalıştır go test

Derleme hatasını incele

./adder_test.go:6:9: undefined: Add

Testin çalışması için minimum kodu yaz ve başarısız test çıktılarını kontrol et

Derleyici hata vermeyecek kadar kod yaz. Testlerimizin doğru nedenle başarısız olup olmadığını kontrol etmek istediğimizi unutma.

package integers

func Add(x, y int) int {
    return 0
}

Aynı tipte iki tane argüman olduğunda (bizim durumumuzda iki integer) (x int, y int) yazmak yerine (x, y int) yazarak kısaltabilirsin.

Şimdi testleri çalıştır ve testin neyin yanlış olduğunu doğru şekilde raporladığını görün.

adder_test.go:10: expected '4' but got '0'

Farkettiyseniz son bölümde named return value öğrenmiştik ama burada aynısını kullanmadık. Bu durum genelde bağlamın sonucu anlaşılır olmadığında kullanılmalıdır. Bizim durumumuzda ise Add fonksiyonunun parametrelerini toplayacağı oldukça açıktır. Daha fazla detay için buraya bakabilirsiniz.

Testi geçecek kadar kod yaz

TDD'nin tam manası ile testi geçecek kadar minimum kod yazmalıyız. Belki ukala bir programcı bu şekilde yapardı.

func Add(x, y int) int {
    return 4
}

Aha! Tekrar engellendi, TDD sahtekarlık değil mi?

Testin başarısız olması için farklı numaralarla başka test yazabiliriz ancak bu kedi fare oyununa benzeyecek.

Go'nun sözdizimine aşina olduğumuzda geliştiricileri sıkmayan ve bug bulmalarına yardımcı olan "Property Based Testing" isimli tekniği anlatacağım.

Şimdilik düzgünce yapalım

func Add(x, y int) int {
    return x + y
}

Eğer testi çalıştırırsanız geçecektir.

Refactor

Var olan kodda iyileştirme yapabileceğimiz bir şey yok.

Dönüş argümanını adlandırarak bunun belgelerde ve aynı zamanda çoğu geliştiricinin editöründe nasıl göründüğünü daha önce keşfetmiştik.

Bu harika çünkü yazdığınız kodun kullanılabilirliğine yardımcı oluyor. Kullanıcı sadece kodunuzun imzasına(type signature) ve dokümanına bakarak kullanımını anlayabilir.

Fonksiyonunuza yorum ekleyerek onlara doküman ekleyebilirsiniz. Standart kütüphanede olduğu gibi bunlar da Go Doc'ta gözükecektir.

// Add takes two integers and returns the sum of them.
func Add(x, y int) int {
    return x + y
}

Örnekler

Gerçekten ekstra mesafe katetmek istiyorsanız örnekleri yapabilirsiniz. Standart kütüphanenin dokümanında bir çok örnek bulabilirsiniz.

Codebasein dışında kalan, readme dosyası gibi dosyaların kod örnekleri kontrol edilmedikleri için eski olmuş olabilir ve var olan kod ile kıyaslandığında yanlış olabilirler.

Go örnekleri tıpkı testler gibi yürütülür, böylece örneklerin kodun gerçekte ne yaptığını yansıttığından emin olabilirsiniz.

Örnekler derlenir ve isteğe bağlı olarak bir paketin test takımının parçası olarak çalıştırılır.

Tipik testlerde olduğu gibi örnekler paketin _test.go dosyasında olan fonksiyonlardır. ExampleAdd fonksiyonunu adder_test.go dosyasına ekleyin.

func ExampleAdd() {
    sum := Add(1, 5)
    fmt.Println(sum)
    // Output: 6
}

(Eğer editörünüz sizin yerinize paketleri otomatik olarak eklemiyorsa, derleme adımı çalışmayacaktır çünkü import "fmt" kodu adder_test.go dosyası içerisnde eksiktir. Hangi editörü kullanırsanız kullanın, bu tür hataların sizin için otomatik olarak nasıl düzeltileceğini araştırmanız şiddetle tavsiye edilir.)

Eğer kodunuz geçerli olmayacak şekilde değişirse, derlemeniz başarısız olacaktır.

Paketin testini çalıştırırsak, örnek fonksiyonun bizden başka bir düzenleme yapılmasına gerek kalmadan çalıştığını görebiliriz:

$ go test -v
=== RUN   TestAdder
--- PASS: TestAdder (0.00s)
=== RUN   ExampleAdd
--- PASS: ExampleAdd (0.00s)

Lütfen not edin, eğer // Output: 6 yorumunu kaldırırsak örnek fonksiyon çalışmayacaktır. Fonksiyon derlenecektir ancak çalışmayacaktır.

Bu kodu ekleyerek örneğimiz godoc içerisindeki dokümanda görünecek ve kodumuz daha da erişilebilir hale gelecektir.

Bunu denemek için godoc -http=:6060 komutunu çalıştırın ve http://localhost:6060/pkg/ adresini ziyaret edin.

Burada $GOPATH içerisindeki tüm paktelerin listesini göreceksiniz, bu kodu $GOPATH/src/github.com/{your_id} gibi bir yere yazdığınızı varsayarsak, örnek dokümanlarınızı bulabileceksiniz.

Eğer kodunuzu örnekler ile açık bir adreste paylaşırsanız, kodunuzun dokümanını pkg.go.dev adresinde paylaşabilirsiniz. Örneğin bu bölüm için nihai API burada. Bu web arayüzü standart kütüphane ve 3. parti kütüphanelerinin dokümanını incelemenize olanak sağlar.

Özetlersek

Ele alınanlar:

  • TDD iş akışının daha fazla uygulanması

  • Integerlar, ekleme

  • Kodumuzun kullanıcılar tarafından hızlı bir şekilde anlayabilmeleri için daha iyi doküman yazmak

  • Testlerimizin bir parçası olarak kontrol edilen kodumuzu nasıl kullanacağımıza dair örnekler

Bu sayfa @bariscanyilmaz tarafından çevrildi.

Last updated