[英]How to assert a partial match with stretchr/testify/mock AssertCalled?
[英]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.