mockery für Go: Vollständige Anleitung mit Beispielen
1. Was ist mockery und warum wird es benötigt?
Mockery ist ein leistungsstarkes Tool zur Generierung von Mock-Objekten in Go. In der modernen Go-Entwicklung, wo Interfaces eine zentrale Rolle spielen, erfordert das Testen isolierter Komponenten oft das Erstellen von Platzhaltern für externe Abhängigkeiten. Mockery automatisiert diesen Prozess, indem es vollständige Interface-Implementierungen generiert, die in Unit-Tests verwendet werden können. Anstatt Dutzende Zeilen Code manuell für jedes Interface zu schreiben, führen Sie einfach einen Befehl aus und erhalten einen fertigen Mock mit allen erforderlichen Methoden.
Die Hauptaufgabe von mockery besteht darin, das Testen von Code zu vereinfachen, der von externen Diensten (Datenbanken, APIs, Dateisysteme usw.) abhängt. Die generierten Mocks ermöglichen es Ihnen, Rückgabewerte zu kontrollieren, die Anzahl der Methodenaufrufe zu überprüfen und die Argumente zu validieren, mit denen sie aufgerufen wurden. Dies ist besonders nützlich bei der Entwicklung von Microservices, bei denen jede Komponente isoliert getestet werden muss. Die Bibliothek verwendet das beliebte Paket testify/mock als Grundlage, was die Kompatibilität mit den meisten Go-Projekten gewährleistet.
Mockery unterstützt sowohl einfache Interfaces mit wenigen Methoden als auch komplexe Hierarchien. Es kann Mocks für eingebaute Typen, Interfaces aus Drittanbieter-Paketen und sogar für generische Interfaces (ab Go 1.18) generieren. Dank eines flexiblen Konfigurationssystems können Sie Dateinamen, Pakete für Mocks und sogar eigene Methoden steuern. Das macht mockery zu einem unverzichtbaren Werkzeug im Arsenal jedes Go-Entwicklers, der qualitativ hochwertigen und wartbaren Code anstrebt.
2. Installation
Die Installation von mockery erfolgt über den standardmäßigen Go-Paketmanager. Führen Sie dazu folgenden Befehl aus:
go install github.com/vektra/mockery/v2@latest
Stellen Sie nach der Installation sicher, dass sich die Binärdatei in Ihrem $PATH befindet. Normalerweise wird sie in $GOPATH/bin oder $HOME/go/bin installiert. Sie können die Installation mit folgendem Befehl überprüfen:
mockery --version
Wenn Sie Go-Module verwenden, empfiehlt es sich, mockery als Entwicklungswerkzeug hinzuzufügen. Erstellen oder bearbeiten Sie dazu die Datei tools.go im Projektstammverzeichnis:
//go:build tools
// +build tools
package tools
import (
_ "github.com/vektra/mockery/v2"
)
Führen Sie dann Folgendes aus:
go mod tidy
Dadurch wird sichergestellt, dass die Version von mockery in Ihrer go.mod-Datei festgehalten wird.
3. Schnellstart – Minimales Arbeitsbeispiel
Betrachten wir ein einfaches Beispiel. Angenommen, wir haben ein Interface UserRepository:
// user.go
package main
type User struct {
ID int
Name string
}
type UserRepository interface {
GetUser(id int) (*User, error)
SaveUser(user *User) error
}
Führen Sie zum Generieren des Mocks folgenden Befehl im Projektstammverzeichnis aus:
mockery --name=UserRepository --output=mocks --with-expecter
Dieser Befehl erstellt die Datei mocks/UserRepository.go mit der Mock-Implementierung. Jetzt können wir sie in einem Test verwenden:
// user_test.go
package main
import (
"testing"
"github.com/stretchr/testify/assert"
"your-project/mocks"
)
func TestGetUser(t *testing.T) {
// Mock erstellen
mockRepo := mocks.NewUserRepository(t)
// Erwartetes Verhalten konfigurieren
expectedUser := &User{ID: 1, Name: "Alice"}
mockRepo.On("GetUser", 1).Return(expectedUser, nil)
// Zu testende Funktion aufrufen
user, err := mockRepo.GetUser(1)
// Ergebnisse überprüfen
assert.NoError(t, err)
assert.Equal(t, expectedUser, user)
// Überprüfen, ob alle Erwartungen erfüllt wurden
mockRepo.AssertExpectations(t)
}
Auch in der Bibliothek
SwiftyJSON für Swift: Vollständiges Handbuch mit Beispielen
Integration von Prometheus-Metriken in Kotlin-Anwendungen: Vollständige Anleitung
Caching in Rust: Die Bibliothek `cached`
Lottie für Swift: Das komplette Tutorial mit Beispielen
Arbeiten mit Daten in Kotlin: Überblick über Bibliotheken und Werkzeuge