Kom igång med att skriva tester

Slutförd

Innan vi börjar skriva vårt program ska vi prata om att testa och skapa vårt första test. Pakettestning ger stöd för automatiserad testning av Go-paket. Testning är viktigt för att säkerställa att koden fungerar som förväntat. I allmänhet bör det finnas minst ett test för varje funktion i ett paket för att bekräfta funktionen.

En bra metod att följa när du kodar är att använda metoden för testdriven utveckling (TDD). Med den här metoden skriver vi våra tester först. Vi ser till att dessa tester misslyckas eftersom koden som de testar ännu inte finns. Och sedan skriver vi koden som uppfyller testerna.

Skapa testfilen

Först måste vi skapa Go-filen för att behålla alla våra tester för bankcore paketet. När du skapar en testfil måste filens namn avslutas med _test.go. Du kan placera vad du vill tidigare, men mönstret är att använda namnet på filen som du testar.

Dessutom måste varje test som du vill skriva vara en funktion som börjar med Test. Sedan skriver du vanligtvis ett beskrivande namn för testet du skriver, till exempel TestDeposit.

Gå till platsen $GOPATH/src/bankcore/ och skapa en fil med bank_test.go namnet med följande innehåll:

package bank

import "testing"

func TestAccount(t *testing.T) {

}

Öppna en terminal och kontrollera att du är på platsen $GOPATH/src/bankcore/ . Använd sedan följande kommando för att köra testerna i utförligt läge:

go test -v

Go söker efter alla *_test.go filer för att köra testerna, så du bör se följande utdata:

=== RUN   TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok      github.com/msft/bank    0.391s

Skriva ett misslyckat test

Innan vi skriver någon kod ska vi först skriva ett misslyckat test för den med hjälp av TDD. TestAccount Ändra funktionen med följande kod:

package bank

import "testing"

func TestAccount(t *testing.T) {
    account := Account{
        Customer: Customer{
            Name:    "John",
            Address: "Los Angeles, California",
            Phone:   "(213) 555 0147",
        },
        Number:  1001,
        Balance: 0,
    }

    if account.Name == "" {
        t.Error("can't create an Account object")
    }
}

Vi har introducerat en struktur för konton och kunder som vi ännu inte har implementerat. Och vi använder t.Error() funktionen för att säga att testet misslyckas om något inte händer som det ska hända.

Observera också att testet har logiken för att skapa ett kontoobjekt (som inte finns ännu). Men vi utformar just nu hur vi vill interagera med vårt paket.

Kommentar

Vi ger dig koden för testerna eftersom vi inte vill förklara rad för rad. Men din mentala modell bör vara att du börjar lite i taget och gör så många iterationer som du behöver.

I vårt fall ska vi bara göra en iteration: skriva testet, se till att det misslyckas och skriva koden som uppfyller testet. När du kodar på egen hand bör du börja enkelt och lägga till komplexitet när du fortsätter.

När du kör go test -v kommandot bör du se ett misslyckat test i utdata:

# github.com/msft/bank [github.com/msft/bank.test]
.\bank_test.go:6:13: undefined: Account
.\bank_test.go:7:13: undefined: Customer
FAIL    github.com/msft/bank [build failed]

Låt oss lämna det här för tillfället. Vi slutför det här testet och skapar nya tester när vi skriver logiken för vårt onlinebanksystem.