0

http.Client をモックするためにこの投稿を見て使用しましたが、モック リクエストを渡そうとすると、次のエラーが表示されます。mockClient (タイプ *MockClient の変数) を *"net/http".Client として使用できません。 api.callAPI への引数の値。

1 つのファイルには、実際のコードがあります。

HTTPClient を作成しました。

type HTTPClient interface {
    Do(req *http.Request) (*http.Response, error)
}

HTTPClient をインターフェイスとして渡す関数があります (仕事用なのですべてを表示することはできませんが、ここに重要な部分があります)。

func (api *API) callAPI(req *http.Request, client HTTPClient) (utils.ErrorWrapper, bool) {
response, err := client.Do(req)
}

callAPI メソッドを呼び出す別の関数もあります。その関数では、callAPI 関数を呼び出す直前にクライアント変数を作成します

var Client HTTPClient = &http.Client{}
response, isRetry := api.callAPI(req, Client)

これはすべてうまくいきます。ただし、私のテストファイルでは、上記のエラーが発生します。私はモックフレームワークにtestifyを使用しています。これが私のテストファイルにあるものです(テストファイルと実際のコードの両方が同じパッケージに含まれています):

testify を使用してモック クライアントと Do 関数をセットアップする

type MockClient struct {
    mock.Mock
}

func (m *MockClient) Do(req *http.Request) (*http.Response, error) {
    args := m.Called()
    resp := args.Get(0)
    return resp.(*http.Response), args.Error(1)
}

次に、テストを作成します。

func TestCallAPI(t *testing.T) {

    mockClient := &MockClient{}

    recorder := httptest.NewRecorder()
    responseCh := make(chan utils.ErrorWrapper)
    c, _ := gin.CreateTestContext(recorder)
id:= "unitTest123"


    api := NewAPICaller(responseCh, id, c)

    var response = Response{
        StatusCode: 200,
    }
    //setup expectations
    mockClient.On("Do").Return(response, nil)

    req, _ := http.NewRequest("GET", "URL I Can't Show", nil)


    wrapper, isRetry := api.callAPI(req, mockClient)
    mockClient.AssertExpectations(t)
    assert.Equal(t, "placeholder", wrapper)
    assert.Equal(t, false, isRetry)

}

Client 変数で行ったのと同じように、mockclient 変数で同様のことを試みました。

var mockclient HTTPClient = &MockClient{}

しかし、HTTPClient でこのエラーが発生します: undeclared name: HTTPClient. それらは同じパッケージの一部であるため、なぜこれが起こっているのかわからないので、簡単にエクスポートできると思いましたか?

4

1 に答える 1