嘲笑。有一种简单的方法吗?

时间:2017-02-22 10:05:56

标签: unit-testing testing go mocking

我来自python,我一直在寻找一种方法来编写。我在SO上遇到了一些事情,但它们看起来都非常麻烦,而且对于需要一直需要的东西都很冗长。

我现在正在手机上打字,如果需要,稍后会添加代码...但是例如......

说我有一个函数在中间某处调用smtp.Send。我怎样才能轻松测试这个功能呢?

假设我有另一个击中一些外部api(需要嘲笑),然后接受响应并调用ioutil.Readall()之类的东西...我怎么能通过这个测试函数并模拟调用api,然后在调用Readall时传递一些虚假的响应数据?

1 个答案:

答案 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方法。