Wie man Mocks für Funktionen in Go beim Unit-Testing richtig erstellt
Hallo! Ich habe angefangen, Go zu lernen, und versuche, Unit-Tests für mein Projekt zu schreiben. Ich bin auf ein Problem gestoßen: Ich habe eine Funktion, die einen externen Service aufruft (z. B. eine E-Mail sendet oder eine HTTP-Anfrage macht). In den Tests möchte ich diese Services nicht wirklich aufrufen, also muss ich einen Mock erstellen.
Hier ist ein vereinfachtes Beispiel meines Codes:
```go
package main
import (
"fmt"
"net/smtp"
)
type EmailSender struct{}
func (e *EmailSender) SendEmail(to, subject, body string) error {
// Tatsächliches Senden einer E-Mail über SMTP
err := smtp.SendMail("smtp.example.com:587", nil, "from@example.com", []string{to}, []byte(body))
if err != nil {
return fmt.Errorf("failed to send email: %w", err)
}
return nil
}
func NotifyUser(sender *EmailSender, userEmail string) error {
return sender.SendEmail(userEmail, "Welcome", "Hello! Thanks for registering.")
}
```
Ich habe über Interfaces und Mocks gelesen, verstehe aber nicht, wie ich den Code richtig organisieren soll. Muss ich ein