第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何對(duì)與 Elasticsearch 交互的 go 代碼進(jìn)行單元測試

如何對(duì)與 Elasticsearch 交互的 go 代碼進(jìn)行單元測試

Go
拉風(fēng)的咖菲貓 2022-05-23 14:51:46
我有一個(gè)應(yīng)用程序,它定義了一個(gè)type Client struct {}在我的代碼中與其他各種客戶端對(duì)話的應(yīng)用程序,這些客戶端與 github、elasticsearch 等服務(wù)對(duì)話?,F(xiàn)在我的一個(gè)包中有以下 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 docfunc (s *ESSink) Write(context, index, mapping, doc) {}我在像這樣運(yùn)行整個(gè)應(yīng)用程序的主客戶端中使用此方法c.es.Write(...)?,F(xiàn)在,如果我想編寫client_test.go,我可以簡單地制作一個(gè) mockESSink 并將它與一些存根代碼一起使用,但這不會(huì)涵蓋我的 ES 代碼中編寫的行。如何對(duì)我的 ES 代碼進(jìn)行單元測試?我的 ESSink 使用elastic.Client. 我如何嘲笑它?我想嵌入一些模擬 ES 客戶端,它給我存根響應(yīng),我將能夠以這種方式測試我ESSink.Write的方法。
查看完整描述

1 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

根據(jù)您的問題,我假設(shè)您正在使用github.com/olivere/elastic,并且您希望能夠使用存根 http 響應(yīng)進(jìn)行測試。當(dāng)我第一次閱讀這個(gè)問題時(shí),我也從未編寫過使用 ES 客戶端的 Go 測試代碼。所以,除了回答這個(gè)問題,我還分享了我是如何從 godocs 中找到答案的。


首先,我們可以看到elastic.NewClient接受客戶端選項(xiàng)功能。所以我檢查了庫提供了什么樣的客戶端選項(xiàng)功能。原來圖書館提供elastic.SetHttpClient了接受elastic.Doer. Doer是一個(gè)http.Client可以實(shí)現(xiàn)的接口。從這里,答案變得清晰。


所以,你必須:


將您的更改func NewESSink()為接受 http 客戶端或彈性客戶端。

編寫存根 http 客戶端(實(shí)現(xiàn)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(...)

}

在您的生產(chǎn)代碼中,您可以http.Client{}在設(shè)置 ES http 客戶端時(shí)使用。


查看完整回答
反對(duì) 回復(fù) 2022-05-23
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)