Testabdeckung und testify
go test -cover und die Assertion-Bibliothek testify
Testabdeckung und testify ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
go test -cover
Fügen Sie -cover zu jedem go test-Befehl hinzu, um den prozentualen Abdeckungsgrad für jedes Paket auszugeben.
go test -cover ./...
// ok myapp 68.4% of statementsCoverage-Profil
Erzeugen Sie eine Coverage-Profildatei und zeigen Sie sie als HTML an, um zu sehen, welche Zeilen abgedeckt sind:
go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.htmlCoverage-Schwellenwerte in CI
Erzwingen Sie eine Mindestabdeckung mit einer einzeiligen Shell-Anweisung:
pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }100 % Coverage ist nicht das Ziel
Coverage misst, welche Zeilen ausgeführt werden, nicht, ob Assertions sinnvoll sind. Streben Sie auf kritischen Pfaden eine hohe Abdeckung an; bei nicht erreichbaren Fehlerzweigen ist eine niedrigere Abdeckung akzeptabel.
testify/assert
github.com/stretchr/testify/assert bietet gut lesbare Assertions, die erwartete und tatsächliche Werte automatisch ausgeben:
assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)testify/require
require ist identisch mit assert, ruft bei einem Fehler jedoch t.FailNow() auf und beendet den Test sofort (wie t.Fatal).
require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is niltestify/suite
testify/suite gruppiert zusammengehörige Tests in einer Struct mit gemeinsamem Setup und Teardown, ähnlich wie xUnit-Testsuiten:
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
Vergleichen Sie Slices, ohne die Reihenfolge zu berücksichtigen:
assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})assert.JSONEq
Vergleichen Sie JSON-Strings unabhängig von der Reihenfolge der Schlüssel:
assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)Benutzerdefinierte Assertions
Kapseln Sie testify in eigenen Assertion-Hilfsfunktionen, um Fehlermeldungen um Domänenkontext zu ergänzen:
func assertUserValid(t testing.TB, u *User) {
t.Helper()
assert.NotEmpty(t, u.Name)
assert.Positive(t, u.ID)
}Coverage mit testify kombinieren
testify hat keinen Einfluss auf die Coverage-Ausgabe – bei der Coverage zählt nur, dass Zeilen ausgeführt werden, unabhängig von der verwendeten Assertion-Bibliothek.
Kurze Überprüfung
Was ist der Unterschied zwischen testify/assert und testify/require?
Zusammenfassung: Coverage und testify
Wichtige Punkte:
- go test -cover; -coverprofile für einen HTML-Bericht
- assert: bei einem Fehler fortfahren; require: bei einem Fehler abbrechen
- testify/suite für gruppierte Tests mit gemeinsamem Setup
- Eine hohe Coverage ist gut, aussagekräftige Assertions sind besser
Häufig gestellte Fragen
Ist die Lektion „Testabdeckung und testify“ kostenlos?
Ja — der vollständige Text von „Testabdeckung und testify“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Testabdeckung und testify“?
go test -cover und die Assertion-Bibliothek testify Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Testabdeckung und testify“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Unit-Tests mit testing schreiben
- Tabellengesteuerte Tests
- Test-Doubles: Mocks und Stubs
- Testabdeckung und testify