0Pricing
Go Academy · Lektion

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 statements

Coverage-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.html

Coverage-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 nil

testify/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

  1. Unit-Tests mit testing schreiben
  2. Tabellengesteuerte Tests
  3. Test-Doubles: Mocks und Stubs
  4. Testabdeckung und testify
← Zurück zu Go Academy