簡體   English   中英

如何使用 stretr/testify 模擬 class 字段?

[英]How to mock a class field by using stretchr/testify?

我正在使用https://github.com/stretchr/testify go 庫來模擬 class。我想為 aws 模擬一個類的字段 sdk package:github: github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi

我的代碼是:


func publishData(ctx context.Context, api *apigatewaymanagementapi.Client) {

   ...
   api.PostToConnection(...)
}

我需要模擬PostToConnection方法。 我像這樣設置模擬:


type MockApi struct {
    apigatewaymanagementapi.Client
    mock.Mock
}

func (m *MockApi) PostToConnection() (*apigatewaymanagementapi.PostToConnectionOutput, error) {
    m.Called()
    return nil, nil
}

在我的測試用例中,

api := MockApi{}
api.On("PostToConnection").Return(nil, nil)

模擬不起作用,代碼仍然使用真實的Client 我認為問題是模擬只模擬根級方法而不是Client.PostToConnection方法。

我如何模擬Client下的方法?

將 *apigatewaymanagementapi.Client 替換為您自己的界面。 對於這個接口,在測試中,你可以自己寫一個實現(存根)或者使用一個庫來生成它(比如https://github.com/golang/mock )。

例子:

type (
    PublisherClient interface {
        PostToConnection(ctx context.Context, someArgs ... interface{})
    }
)

func publishData(ctx context.Context, api PublisherClient) {
    api.PostToConnection(ctx)
}
type (
    PublisherClientMock struct {
        Args []interface{}
    }
)

func (c PublisherClientMock) PostToConnection(ctx context.Context, someArgs ... interface{}) {
    c.Args = someArgs
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM