Go:
Testien kirjoittaminen

Miten:

Go:ssa testit kirjoitetaan tyypillisesti samaan pakettiin testattavan koodin kanssa. Testeihin tarkoitetut tiedostot on nimetty _test.go-liitteellä. Testit ovat funktioita, jotka ottavat argumentiksi osoittimen testing.T-objektiin (testing-paketista), ja ne ilmaisevat epäonnistumisen kutsumalla metodeita, kuten t.Fail(), t.Errorf() jne.

Esimerkki yksinkertaisesta testistä Add-funktiolle, joka on määritelty math.go-tiedostossa:

// math.go
package math

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

Testitiedosto math_test.go:

package math

import "testing"

func TestAdd(t *testing.T) {
    tulos := Add(1, 2)
    odotettu := 3
    if tulos != odotettu {
        t.Errorf("Add(1, 2) = %d; halutaan %d", tulos, odotettu)
    }
}

Suorita testisi komennolla go test samassa hakemistossa testitiedostojesi kanssa. Esimerkkituloste, joka osoittaa testin läpimenon, näyttäisi samankaltaiselta:

PASS
ok      example.com/my/math 0.002s

Taulukkoon perustuvissa testeissä, jotka mahdollistavat tehokkaan testaamisen eri syöte- ja tulosteyhdistelmillä, määritä rakenne, joka sisältää testitapaukset:

func TestAddTableDriven(t *testing.T) {
    var tests = []struct {
        x        int
        y        int
        odotettu int
    }{
        {1, 2, 3},
        {2, 3, 5},
        {-1, -2, -3},
    }

    for _, tt := range tests {
        testinimi := fmt.Sprintf("%d+%d", tt.x, tt.y)
        t.Run(testinimi, func(t *testing.T) {
            vastaus := Add(tt.x, tt.y)
            if vastaus != tt.odotettu {
                t.Errorf("saatiin %d, halutaan %d", vastaus, tt.odotettu)
            }
        })
    }
}

Syväsukellus

Go-testauskehys, joka esiteltiin Go:n version 1 yhteydessä itse kielen ohella, on suunniteltu integroitumaan saumattomasti Go-työkaluketjuun, heijastaen Go:n painotusta yksinkertaisuuteen ja tehokkuuteen ohjelmistokehityksessä. Toisin kuin jotkut muissa kielissä käytetyt testauskehykset, jotka nojaavat ulkoisiin kirjastoihin tai monimutkaisiin asetuksiin, Go:n sisäänrakennettu testing-paketti tarjoaa suoraviivaisen tavan kirjoittaa ja suorittaa testejä.

Mielenkiintoinen näkökulma Go:n testauslähestymistapaan on konventio yli konfiguraation periaate, jonka se omaksuu, kuten tiedostonimen kaava (_test.go) ja standardikirjaston toimintojen käyttö ulkoisten riippuvuuksien sijaan. Tämä minimalistinen lähestymistapa kannustaa kehittäjiä kirjoittamaan testejä, koska aloituskynnys on matala.

Vaikka Go:n sisäänrakennetut testausominaisuudet kattavat paljon, on olemassa skenaarioita, joissa kolmannen osapuolen työkalut tai kehykset saattavat tarjota enemmän toiminnallisuuksia, kuten mock-generointia, fuzz-testausta tai behavior-driven development (BDD) -tyylisiä testejä. Suositut kirjastot, kuten Testify tai GoMock, täydentävät Go:n standarditestauskykyjä tarjoamalla ekspressiivisempiä väitteitä tai mock-generointi ominaisuuksia, jotka voivat olla erityisen hyödyllisiä monimutkaisissa sovelluksissa, joissa on paljon riippuvuuksia.

Huolimatta näiden vaihtoehtojen olemassaolosta, Go:n standardi testauspaketti säilyy Go-testauksen kulmakivenä sen yksinkertaisuuden, suorituskyvyn ja tiiviin integraation kielen ja työkaluketjun kanssa vuoksi. Olipa kehittäjien valinta laajentaa sitä kolmannen osapuolen työkaluilla tai ei, Go-testauskehys tarjoaa vankan perustan koodin laadun ja luotettavuuden varmistamiseksi.