Testen in Go (Golang): Frameworks und Werkzeuge

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Testen in Go (Golang): Frameworks und Werkzeuge



Go (Golang) wurde von Anfang an mit den Anforderungen der modernen Entwicklung konzipiert, daher gibt es in der Standardbibliothek bereits das leistungsstarke Paket testing. Für komplexe Projekte sind jedoch oft zusätzliche Werkzeuge erforderlich: Mocks, Assertions, BDD-Stil und die Überprüfung auf Goroutine-Leaks. In diesem Artikel werden wir die wichtigsten Frameworks und Bibliotheken für das Testen in Go durchgehen, Codebeispiele zeigen und erklären, wann was verwendet werden sollte.



1. Integriertes Paket testing



Das Standardpaket testing ist die Grundlage von allem. Tests werden in Dateien mit dem Suffix _test.go geschrieben, und die Funktionen müssen die Signatur func TestXxx(t *testing.T) haben. Beispiel:



package main

import ( "testing")

func Sum(a, b int) int { return a + b}

func TestSum(t *testing.T) { result := Sum(2, 3) expected := 5 if result != expected { t.Errorf("Sum(2,3) = %d; want %d", result, expected) }}


Tests ausführen: go test ./.... Für Benchmarks wird testing.B verwendet, für Beispiele ExampleXxx.



2. Bibliothek testify



Testify ist die beliebteste Drittanbieter-Bibliothek für das Testen in Go. Sie bietet praktische Assertions, Mocks und Hilfsfunktionen.



Installation:

go get github.com/stretchr/testify


Beispiel mit Assertions:

package main

import ( "testing" "github.com/stretchr/testify/assert")

func TestSumWithTestify(t *testing.T) { result := Sum(2, 3) assert.Equal(t, 5, result, "Sum should be 5") assert.NotEqual(t, 0, result) assert.True(t, result > 0)}


Testify enthält auch das Paket mock zum Erstellen von Mocks. Beispiel:

package main

import ( "testing" "github.com/stretchr/testify/mock")

// DataService — Schnittstelle, die wir mocken werdentype DataService interface { GetData(id int) string}

// MockDataService — Mock-Strukturtype MockDataService struct { mock.Mock}

func (m *MockDataService) GetData(id int) string { args := m.Called(id) return args.String(0)}

func TestGetData(t *testing.T) { mockService := new(MockDataService) mockService.On("GetData", 1).Return("result1")

result := mockService.GetData(1) assert.Equal(t, "result1", result) mockService.AssertExpectations(t)}


3. gomock — Generierung von Mocks



Gomock von Google ist ein Framework zur Generierung von Mocks auf Basis von Schnittstellen. Es funktioniert über das Dienstprogramm mockgen.



Installation:

go install github.com/golang/mock/mockgen@v1.6.0


Anwendungsbeispiel:

//go:generate mockgen -source=service.go -destination=mock_service.go -package=main

type Service interface { Process(data string) error}

// Im Test:func TestProcess(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish()

mockService := NewMockService(ctrl) mockService.EXPECT().Process("test").Return(nil)

err := mockService.Process("test") assert.NoError(t, err)}


Gomock eignet sich gut für große Projekte mit vielen Schnittstellen – die Codegenerierung spart Zeit.



4. ginkgo — BDD-Stil



Ginkgo ist ein Framework für Behaviour-Driven Development (BDD). Es ermöglicht das Schreiben von Tests im Stil von "Describe", "Context" und "It".



Installation:

go get github.com/onsi/ginkgo/v2go get github.com/onsi/gomega


Beispiel:

package main

import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "testing")

func TestCalculator(

Empfehlungen