go - 在 go 单元测试中模拟 elasticsearch
问题描述
我有以下代码
func NewItemAPI(es *elasticsearch.Client, l util.Logger) item.ItemServer {
return &ItemServerImp{esClient: es, logger: l}
}
func (i *ItemServerImp) Register(ct context.Context, it *item.RegisterItemRequest) (*item.RegisterItemReply, error) {
// doing stuff here
}
我正在尝试为此编写单元测试。我如何模拟elasticsearch.Client
目前我唯一能想到的就是将所有方法提取到一个接口中然后将其传递下来,但老实说我不想仅仅为了这种场景引入一个接口。有什么不同的方法可以模拟elasticsearch.Client
吗?
解决方案
看来您要测试的是客户端给出并由 处理的响应Register
,您可以做的不是模拟,而是Client
模拟来自 Elasticsearch 的响应,如下所示:
type mockTransp struct {
RoundTripFunc func(req *http.Request) (*http.Response, error)
}
func (t *mockTransp) RoundTrip(req *http.Request) (*http.Response, error) {
return t.RoundTripFunc(req)
}
func TestMockClient() {
c, _ := NewClient(
Config{
Transport: &mockTransp{
RoundTripFunc: func(req *http.Request) (*http.Response, error) {
return &http.Response{Body: io.NopCloser(strings.NewReader("{}"))}, nil
},
},
},
)
}
推荐阅读
- c++ - 对未知大小数组的引用的列表初始化:是否应该推断出数组大小?
- python - 无法获得正确的标头功能(403 错误)
- java - 我可以使用一个对象来调用 Thread.sleep 吗?
- r - 如果其他变量在 R 中重复,则将变量设置为 NA
- java - 在 Spring 中使用 ISO 日期作为路径变量时出现自定义错误?
- django-rest-framework - 路线如何与视图集一起使用?路由器不会根据“basename”生成视图?
- javascript - 如何在 HTML 中制作多行警报框
- javascript - isLucky 任务 - CodeSignal;即使 if else 语句默认为 false 也会继续运行
- python - 烧瓶重定向功能未重定向到正确的页面
- mysql - 无法使用“lower_case_table_names=1”创建新的 RDS MySQL 数据库实例