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

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

如何在Golang測(cè)試中模擬一個(gè)進(jìn)行外部調(diào)用的中間件?

如何在Golang測(cè)試中模擬一個(gè)進(jìn)行外部調(diào)用的中間件?

Go
冉冉說(shuō) 2022-11-23 19:23:26
有一個(gè)go-chi中間件正在進(jìn)行外部調(diào)用以授權(quán)請(qǐng)求。我需要嘲笑它的作用。細(xì)節(jié):我有這個(gè)測(cè)試:func Test_HTTP_UserSet_Create_InvalidAction(t *testing.T) {    requestBody :=        `{            "name": "test",            "action": "TEST"        }`    req, _ := http.NewRequest("POST", "/1234/users", bytes.NewBuffer([]byte(requestBody)))    recorder := setupInvalidActionRecorder(t, req)    if status := recorder.Code; status != http.StatusBadRequest {        t.Errorf("Status code expected to be %d but got %d", http.StatusBadRequest, status)        return    }}以上setupUnknownErrorRecorder是:func setupUnknownErrorRecorder(t *testing.T, request *http.Request) *httptest.ResponseRecorder {    recorder := httptest.NewRecorder()    c := resty.New()    resource := users.NewResource(        httpClient.NewHttpClient(log, &config.Server{}, &logger.LogRecord{}, c),    )    resource.Routes().ServeHTTP(recorder, request)    return recorder}我得到的結(jié)果是:=== RUN   Test_HTTP_UserSet_Create_InvalidAction    invalidAction_test.go:71: Status code expected to be 400 but got 401--- FAIL: Test_HTTP_UserSet_Create_InvalidAction (0.00s)c這個(gè)結(jié)果是預(yù)期的,因?yàn)榉?wù)器正在使用我傳遞給的客戶端進(jìn)行外部調(diào)用NewResource。有一個(gè)go-chi中間件正在使用此客戶端進(jìn)行外部調(diào)用。我的問(wèn)題是:如何讓這個(gè) http 調(diào)用始終返回 200 而不是真正進(jìn)行調(diào)用。又名如何嘲笑這個(gè)電話?編輯: 上面httpClient的接口是:type HttpClient struct {    logger          *logger.Logger    config          *config.Server    instrumentation *instrumentation    record          *logger.LogRecord    restyClient     *resty.Client}func NewHttpClient(    logger *logger.Logger,    config *config.Server,    record *logger.LogRecord,    restyClient *resty.Client,) HttpClient {    return HttpClient{        instrumentation: newInstrumentation(logger, record),        config:          config,        logger:          logger,        record:          record,        restyClient:     restyClient,    }}
查看完整描述

1 回答

?
鳳凰求蠱

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

可測(cè)試代碼的一個(gè)非?;镜囊?guī)則是,您不能只在其他服務(wù)中創(chuàng)建新服務(wù)。您需要注入它,并準(zhǔn)備一個(gè)接口(如果返回的內(nèi)容還沒(méi)有接口的話)resty.New。這樣你就可以在測(cè)試中注入你的模擬。


然后你可以使用例如https://pkg.go.dev/github.com/stretchr/testify/mock來(lái)生成模擬并說(shuō)明你的模擬服務(wù)應(yīng)該返回什么值。


評(píng)論后更新:


type HttpClient struct {

    logger          *logger.Logger

    config          *config.Server

    instrumentation *instrumentation

    record          *logger.LogRecord

    restyClient     *resty.Client // <- this is the thing you want to change from a pointer to resty.Client to an interface

}

檢查restyClient您在代碼中使用了哪些方法,并創(chuàng)建包含它們的新接口,例如:


type MyRestyClient interface {

   FirstUsedMethod(..)

   

   ...

}

并將 restyClient 聲明交換為


type HttpClient struct {

    ...

    restyClient     MyRestyClient

之后,您可以使用我之前粘貼的鏈接中的模擬和命令為您生成模擬。


稍后,您只需在測(cè)試中設(shè)置模擬:


restyMock := new(RestyMock)

restyMock.On("MethodYouExpect").Return(returnValueOfYourChoice)


然后您將準(zhǔn)備好的模擬注入到您的測(cè)試服務(wù)中。


查看完整回答
反對(duì) 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 114 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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