Cómo crear correctamente mocks para funciones en Go en pruebas unitarias
¡Hola! He empezado a aprender Go y estoy intentando escribir unit tests para mi proyecto. Me encontré con un problema: tengo una función que llama a un servicio externo (por ejemplo, envía un email o hace una solicitud HTTP). En las pruebas no quiero llamar realmente a estos servicios, por lo que necesito crear un mock.
Aquí tienes un ejemplo simplificado de mi código:
```go
package main
import (
"fmt"
"net/smtp"
)
type EmailSender struct{}
func (e *EmailSender) SendEmail(to, subject, body string) error {
// Envío real de email a través de 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.")
}
```
He leído sobre interfaces y mocks, pero no entiendo cómo organizar el código correctamente. ¿Necesito crear un