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 statementsProfil 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.htmlProgi 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 niltestify/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
- Pisanie testów jednostkowych za pomocą testing
- Testy oparte na tabelach
- Obiekty zastępcze w testach: mocki i stuby
- Pokrycie testami i testify