如何在Go单元测试中正确创建函数的mock?
你好!我开始学习Go,并尝试为我的项目编写单元测试。我遇到了一个问题:我有一个调用外部服务(例如发送电子邮件或进行HTTP请求)的函数。在测试中,我不想真正调用这些服务,因此需要创建一个mock。
以下是我的代码的简化示例:
```go
package main
import (
"fmt"
"net/smtp"
)
type EmailSender struct{}
func (e *EmailSender) SendEmail(to, subject, body string) error {
// 通过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.")
}
```
我读过关于接口和mock的内容,但不知道如何正确组织代码。是否需要创建