Aan de slag met het schrijven van tests
Voordat we ons programma gaan schrijven, gaan we het hebben over testen en onze eerste test maken. Pakkettests bieden ondersteuning voor geautomatiseerd testen van Go-pakketten. Testen is belangrijk om ervoor te zorgen dat code werkt zoals verwacht. Over het algemeen moet er ten minste één test zijn voor elke functie in een pakket om de functionaliteit te bevestigen.
Een goede gewoonte om te volgen bij het coderen is het gebruik van de TDD-benadering (testgestuurde ontwikkeling). Met deze aanpak schrijven we eerst onze tests. We zorgen ervoor dat deze tests mislukken omdat de code die ze testen nog niet bestaat. Vervolgens schrijven we de code die voldoet aan de tests.
Het testbestand maken
Eerst moeten we het Go-bestand maken om al onze tests voor het bankcore
pakket te bewaren. Wanneer u een testbestand maakt, moet de naam van het bestand eindigen met _test.go
. U kunt wat u wilt, maar het patroon is om de naam te gebruiken van het bestand dat u test.
Daarnaast moet elke test die u wilt schrijven een functie zijn die begint met Test
. Vervolgens schrijft u meestal een beschrijvende naam voor de test die u schrijft, zoals TestDeposit
.
Ga naar de $GOPATH/src/bankcore/
locatie en maak een bestand bank_test.go
met de volgende inhoud:
package bank
import "testing"
func TestAccount(t *testing.T) {
}
Open een terminal en controleer of u zich op de $GOPATH/src/bankcore/
locatie bevindt. Gebruik vervolgens de volgende opdracht om de tests uit te voeren in uitgebreide modus:
go test -v
Go zoekt naar alle *_test.go
bestanden om de tests uit te voeren, dus u ziet de volgende uitvoer:
=== RUN TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok github.com/msft/bank 0.391s
Een mislukte test schrijven
Voordat we code schrijven, gaan we eerst een mislukte test schrijven met behulp van TDD. Wijzig de TestAccount
functie met de volgende code:
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")
}
}
We hebben een structuur geïntroduceerd voor accounts en klanten die we nog niet hebben geïmplementeerd. En we gebruiken de t.Error()
functie om te zeggen dat de test mislukt als er iets niet gebeurt zoals het hoort te gebeuren.
U ziet ook dat de test de logica heeft om een accountobject te maken (dat nog niet bestaat). Maar we ontwerpen op dit moment hoe we willen communiceren met ons pakket.
Notitie
We geven u de code voor de tests, omdat we regel per regel niet willen uitleggen. Maar uw mentale model moet zijn dat u weinig met weinig begint en net zoveel iteraties uitvoert als u nodig hebt.
In ons geval gaan we slechts één iteratie uitvoeren: de test schrijven, ervoor zorgen dat deze mislukt en de code schrijven die voldoet aan de test. Wanneer u zelf codeert, moet u eenvoudig beginnen en complexiteit toevoegen terwijl u verder gaat.
Wanneer u de go test -v
opdracht uitvoert, ziet u een mislukte test in de uitvoer:
# 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]
Laten we het hier voorlopig achterlaten. We gaan deze test voltooien en nieuwe tests maken terwijl we de logica schrijven voor ons online banksysteem.