del*_*lta 0 testing unit-testing mocking go
我来自 python,我一直在寻找一种在 go 中编写 yess 的方法。我在 SO 上遇到了一些事情,但对于那些应该一直需要的东西来说,它们看起来都非常麻烦和冗长。
我现在正在手机上打字,如果需要的话稍后会添加代码......但是例如......
假设我有一个调用smtp.Send中间某处的函数。我怎样才能轻松测试这个功能?
假设我有另一个命中一些外部 api(需要模拟),然后获取响应并调用类似ioutil.Readall()...我如何通过这个测试函数并模拟对 api 的调用,然后传递一些假响应数据什么时候Readall被调用?
您可以使用界面来完成此操作。例如,假设您有一个名为 Mailer 的界面:
type Mailer interface {
Send() error
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将 Mailer 对象嵌入到调用该方法的函数中Send。
type Processor struct {
Mailer
}
func (p *Processor) Process() {
_ = p.Mailer.Send()
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的测试中,您可以创建一个模拟邮件程序。
type mockMailer struct{}
//implement the Send on the mockMailer as you wish
p := &Processor{
Mailer: mockMailer,
}
p.Process()
Run Code Online (Sandbox Code Playgroud)
当p.Process到达该Send方法时,它会调用您的模拟Send方法。