我来自python,我一直在寻找一种方法来编写。我在SO上遇到了一些事情,但它们看起来都非常麻烦,而且对于需要一直需要的东西都很冗长。
我现在正在手机上打字,如果需要,稍后会添加代码...但是例如......
说我有一个函数在中间某处调用smtp.Send
。我怎样才能轻松测试这个功能呢?
假设我有另一个击中一些外部api(需要嘲笑),然后接受响应并调用ioutil.Readall()
之类的东西...我怎么能通过这个测试函数并模拟调用api,然后在调用Readall
时传递一些虚假的响应数据?
答案 0 :(得分:2)
您可以使用界面来完成。例如,假设您有一个名为Mailer的接口:
type Mailer interface {
Send() error
}
现在,您可以将Mailer对象嵌入到调用Send
方法的函数中。
type Processor struct {
Mailer
}
func (p *Processor) Process() {
_ = p.Mailer.Send()
}
现在,在您的测试中,您可以创建一个模拟邮件程序。
type mockMailer struct{}
//implement the Send on the mockMailer as you wish
p := &Processor{
Mailer: mockMailer,
}
p.Process()
当p.Process
到达Send
方法时,它会调用您的模拟Send
方法。