原有一些方法 ,没有接口也没有对象 func GetShopMemberAccountContactByShopMemberId(shopMemberId int64) *accountProto.Contact { vendorContactPerson, _ := GetContactPersonByShopMemberId(shopMemberId) if vendorContactPerson != nil { accountContactResult, _ := AccountClient.ContactSearch(context.Background(), &accountProto.AccountContactSearchRequest{ AccountTypes: []string{"shop"}, ContactStringId: vendorContactPerson.ContactId, }) if accountContactResult != nil && len(accountContactResult.List) == 1 { return accountContactResult.List[0] } } return &accountProto.Contact{} } func GetContactPersonByShopMemberId(id int64) (*connectionProto.ContactPerson, error) { return ConnectionClient.ContactPersonGetByShopMemberId(context.Background(), &connectionProto.IDRequest{ID: id}) }
抽取接口
type RpcIface interface { GetShopById(shopId int64) (connectionProto.ContactShopInfo, error) GetShopMemberAccountContactByShopMemberId(shopMemberId int64) *accountProto.Contact GetContactPersonByShopMemberId(id int64) (*connectionProto.ContactPerson, error)
}
改造原实现
type Rpcli struct { basedto.BaseEntitySingle } func NewRpcli() *Rpcli { return &Rpcli{} } func (r Rpcli) GetShopById(shopId int64) (connectionProto.ContactShopInfo, error) { return rpcClient.GetShopById(shopId) } func (r Rpcli) GetShopMemberAccountContactByShopMemberId(shopMemberId int64) *accountProto.Contact { //TODO implement me return rpcClient.GetShopMemberAccountContactByShopMemberId(shopMemberId) } func (r Rpcli) GetContactPersonByShopMemberId(id int64) (*connectionProto.ContactPerson, error) { //TODO implement me return rpcClient.GetContactPersonByShopMemberId(id) }
实现测试桩
import ( "git.ichub.com/general/webcli120/goconfig/base/basedto" "git.ichub.com/general/webcli120/goconfig/ichublog/golog" "icd/plugins/rpcClient" accountProto "icd/proto/account" connectionProto "icd/proto/connection" generalProto "icd/proto/general" ) type RpcMock struct { basedto.BaseEntitySingle } func NewRpcMock() *RpcMock { return &RpcMock{} } func (r RpcMock) GetShopById(shopId int64) (connectionProto.ContactShopInfo, error) { golog.Info(" RpcMock GetShopById !") return connectionProto.ContactShopInfo{}, nil } func (r RpcMock) GetShopMemberAccountContactByShopMemberId(shopMemberId int64) *accountProto.Contact { //TODO implement me return rpcClient.GetShopMemberAccountContactByShopMemberId(shopMemberId) } func (r RpcMock) GetContactPersonByShopMemberId(id int64) (*connectionProto.ContactPerson, error) { //TODO implement me return rpcClient.GetContactPersonByShopMemberId(id) } func (r RpcMock) AccountContactIdObtain(shopId int64) (int64, error) { //TODO implement me return rpcClient.AccountContactIdObtain(shopId) } func (r RpcMock) GetBillCompanyByShopId(ShopId int64) (string, string, error) { //TODO implement me panic("implement me") } func (r RpcMock) ContactShopMemberQuery(shopMemberId int64) (string, error) { //TODO implement me panic("implement me") }使用接口
package rpcfactroy import ( "git.ichub.com/general/webcli120/goconfig/ichublog/golog" "icd/plugins/rpcClient/rpcfactroy/rpciface" "icd/plugins/rpcClient/rpcfactroy/rpcli" "icd/plugins/rpcClient/rpcfactroy/rpcmock" ) /* @Title 文件名称: rpcfactroy.go @Description 描述: @Author 作者: [email protected] 时间(2024-02-18 22:38:21) @Update 作者: [email protected] 时间(2024-02-18 22:38:21) */ var IfTestCmsMock bool = false func InitMock() { IfTestCmsMock = true golog.Info("start gomock IfTestCmsMock = ", IfTestCmsMock) } func RpcClient() rpciface.RpcIface { if IfTestCmsMock { return rpcmock.FindBeanRpcMock() } return rpcli.FindBeanRpcli() }