0Pricing
Go Academy · Lekcja

Pokrycie testami i testify

go test -cover i biblioteka asercji testify

Pokrycie testami i testify to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

go test -cover

Dodaj -cover do dowolnego polecenia go test, aby wyświetlić procent pokrycia dla każdego pakietu.

go test -cover ./...
// ok  myapp 68.4% of statements

Profil pokrycia

Wygeneruj plik profilu pokrycia i wyświetl go w formacie HTML, aby sprawdzić, które wiersze są objęte testami:

go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.html

Progi pokrycia w CI

Wymuś minimalny poziom pokrycia za pomocą jednolinijkowego polecenia powłoki:

pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }

Pokrycie 100% nie jest celem

Pokrycie mierzy, które wiersze kodu zostały wykonane, a nie to, czy asercje są wartościowe. Dąż do wysokiego pokrycia ścieżek krytycznych, ale zaakceptuj niższe pokrycie niedostępnych gałęzi obsługi błędów.

testify/assert

github.com/stretchr/testify/assert udostępnia czytelne asercje, które automatycznie raportują wartości oczekiwane i rzeczywiste:

assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)

testify/require

require działa tak samo jak assert, ale w przypadku niepowodzenia wywołuje t.FailNow(), natychmiast zatrzymując test (podobnie jak t.Fatal).

require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is nil

testify/suite

testify/suite grupuje powiązane testy w strukturze ze wspólną konfiguracją i sprzątaniem, podobnie jak zestawy testów xUnit:

type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }

assert.ElementsMatch

Porównywanie wycinków bez uwzględniania kolejności:

assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})

assert.JSONEq

Porównywanie ciągów JSON bez względu na kolejność kluczy:

assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)

Niestandardowe asercje

Proszę opakować testify we własne pomocnicze funkcje asercji, aby dodać kontekst domenowy do komunikatów o niepowodzeniu:

func assertUserValid(t testing.TB, u *User) {
    t.Helper()
    assert.NotEmpty(t, u.Name)
    assert.Positive(t, u.ID)
}

Łączenie pokrycia kodu z testify

testify nie wpływa na raportowanie pokrycia kodu — pokrycie uwzględnia tylko wykonanie wierszy, niezależnie od używanej biblioteki asercji.

Szybkie sprawdzenie

Jaka jest różnica między testify/assert a testify/require?

Podsumowanie: pokrycie kodu i testify

Najważniejsze informacje:

  • go test -cover; -coverprofile dla raportu HTML
  • assert: kontynuuje po niepowodzeniu; require: zatrzymuje się po niepowodzeniu
  • testify/suite do grupowania testów ze wspólną konfiguracją początkową
  • Wysokie pokrycie kodu jest dobre, ale znaczące asercje są ważniejsze

Często zadawane pytania

Czy lekcja „Pokrycie testami i testify” jest bezpłatna?

Tak — pełny tekst „Pokrycie testami i testify” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Pokrycie testami i testify”?

go test -cover i biblioteka asercji testify Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Pokrycie testami i testify”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pisanie testów jednostkowych za pomocą testing
  2. Testy oparte na tabelach
  3. Obiekty zastępcze w testach: mocki i stuby
  4. Pokrycie testami i testify
← Powrót do Go Academy