1 回答
TA贡献1786条经验 获得超11个赞
根据您的问题,我假设您正在使用github.com/olivere/elastic,并且您希望能够使用存根 http 响应进行测试。当我第一次阅读这个问题时,我也从未编写过使用 ES 客户端的 Go 测试代码。所以,除了回答这个问题,我还分享了我是如何从 godocs 中找到答案的。
首先,我们可以看到elastic.NewClient接受客户端选项功能。所以我检查了库提供了什么样的客户端选项功能。原来图书馆提供elastic.SetHttpClient了接受elastic.Doer. Doer是一个http.Client可以实现的接口。从这里,答案变得清晰。
所以,你必须:
将您的更改func NewESSink()为接受 http 客户端或弹性客户端。
编写存根 http 客户端(实现elastic.Doer)。
ESSink
type ESSink struct {
client *elastic.Client
}
func NewESSink(client *elastic.Client) *ESSink {
return &ESSink{client: client}
}
存根 HttpClient
package stubs
import "net/http"
type HTTPClient struct {
Response *http.Response
Error error
}
func (c *HTTPClient) Do(*http.Request) (*http.Response, error) {
return c.Response, c.Error
}
你的测试代码
func TestWrite(t *testing.T) {
// set the body and error according to your test case
stubHttpClient := stubs.HTTPClient{
Response: &http.Response{Body: ...},
Error: ...,
}
elasticClient := elastic.NewClient(elastic.SetHttpClient(stubHttpClient))
esSink := NewESSink(elasticClient)
esSink.Write(...)
}
在您的生产代码中,您可以http.Client{}在设置 ES http 客户端时使用。
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报