【发布时间】:2020-06-22 12:28:52
【问题描述】:
我有一个应用程序,它定义了一个 type Client struct {},它与我的代码中的各种其他客户端对话,这些客户端与 github、elasticsearch 等服务对话。
现在我的一个包中有以下 ES 代码
type SinkService interface {
Write(context, index, mapping, doc)
}
type ESSink struct {
client *elastic.Client
}
func NewESSink() *ESSink {}
// checks if the index exists and writes the doc
func (s *ESSink) Write(context, index, mapping, doc) {}
我在像c.es.Write(...) 这样运行整个应用程序的主客户端中使用此方法。现在,如果我想编写 client_test.go,我可以简单地制作一个 mockESSink 并将其与一些存根代码一起使用,但这不会涵盖我的 ES 代码中编写的行。
如何对我的 ES 代码进行单元测试?我的 ESSink 使用elastic.Client。我该如何模拟呢?
我想嵌入一些模拟 ES 客户端来给我存根响应,这样我就可以测试我的 ESSink.Write 方法。
【问题讨论】:
-
与模拟任何东西的方式相同,您必须将
elastic.Client字段替换为定义您使用的方法的接口,然后创建一个满足用于测试的接口的模拟。
标签: unit-testing go testing mocking