Pratybos — parašyk testus
Skaityti testus neužtenka — reikia juos rašyti. Penkios pratybos: kiekvienai parašyk lentelės testą funkcijai, kurią jau turi (iš ankstesnių pamokų), paleisk go test ir palygink su sprendimu. Funkcija įvardyta kiekvienoje; sprendimas — pats testas.
1 (lengva) — testuok sumRange (5 pamoka): sumuoja sveikuosius nuo a iki b.
func TestSumRange(t *testing.T) {
cases := []struct {
a, b, want int
}{
{1, 5, 15},
{3, 3, 3},
{0, 0, 0},
}
for _, c := range cases {
if got := sumRange(c.a, c.b); got != c.want {
t.Errorf("sumRange(%d, %d) = %d, want %d", c.a, c.b, got, c.want)
}
}
}
2 (lengva) — testuok digitSum (5 pamoka): sumuoja skaitmenis. Įtrauk neigiamą, kad patikrintum tą kraštą.
func TestDigitSum(t *testing.T) {
cases := []struct {
in, want int
}{
{1234, 10},
{0, 0},
{-52, 7},
}
for _, c := range cases {
if got := digitSum(c.in); got != c.want {
t.Errorf("digitSum(%d) = %d, want %d", c.in, got, c.want)
}
}
}
3 (vidutinė) — testuok slug (7 pamoka): mažosios, tarpai → brūkšneliai, be kraštų.
func TestSlug(t *testing.T) {
cases := []struct {
in, want string
}{
{" The Go Language ", "the-go-language"},
{"Go", "go"},
}
for _, c := range cases {
if got := slug(c.in); got != c.want {
t.Errorf("slug(%q) = %q, want %q", c.in, got, c.want)
}
}
}
4 (vidutinė) — testuok grade (5 pamoka). Klaidos gyvena ribose — testuok 90, 89, 80, o ne tik „gerą balą".
func TestGrade(t *testing.T) {
cases := []struct {
score int
want string
}{
{90, "A"},
{89, "B"},
{80, "B"},
{69, "F"},
}
for _, c := range cases {
if got := grade(c.score); got != c.want {
t.Errorf("grade(%d) = %q, want %q", c.score, got, c.want)
}
}
}
5 (sunkesnė) — testuok per ilgo pavadinimo šaką validateTitle. Reikia pasidaryti tikslaus ilgio įėjimą. Naudok strings.Repeat — ir prisimink, kad skaičiuoja simboliai, tad 41 „ą" viršija 40 simbolių ribą (nors tai 82 baitai).
func TestValidateTitleTooLong(t *testing.T) {
long := strings.Repeat("ą", 41) // 41 simbolis, 82 baitai
got := validateTitle(long)
want := "title is too long (max 40 characters)"
if got != want {
t.Errorf("validateTitle(41 chars) = %q, want %q", got, want)
}
}
Patarimas. Nori pamatyti raudoną? Tyčia pakeisk vieną
wantį klaidingą reikšmę ir paleiskgo test— perskaityk nesėkmės eilutę, tada grąžink atgal. Žinoti, kaip atrodo krentantis testas — tai pusė pasitikėjimo praeinančiu.