Como criar mocks para funções em Go durante testes unitários?
Olá! Comecei a estudar Go e estou tentando escrever testes unitários para meu projeto. Encontrei um problema: tenho uma função que chama um serviço externo (por exemplo, envia email ou faz uma requisição HTTP). Nos testes, não quero realmente chamar esses serviços, então preciso criar um mock.
Aqui está um exemplo simplificado do meu código:
```go
package main
import (
"fmt"
"net/smtp"
)
type EmailSender struct{}
func (e *EmailSender) SendEmail(to, subject, body string) error {
// Envio real de email via SMTP
err := smtp.SendMail("smtp.example.com:587", nil, "from@example.com", []string{to}, []byte(body))
if err != nil {
return fmt.Errorf("falha ao enviar email: %w", err)
}
return nil
}
func NotifyUser(sender *EmailSender, userEmail string) error {
return sender.SendEmail(userEmail, "Bem-vindo", "Olá! Obrigado por se registrar.")
}
```
Li sobre interfaces e mocks, mas não entendo como organizar o código corretamente. Preciso criar um