为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Mocking - 类型冲突问题

Golang Mocking - 类型冲突问题

Go
MMTTMM 2021-11-15 20:56:26
我正在模拟一个 DataStore 和它的获取/设置功能。我遇到的问题是:不能在 EventHandler 的参数中使用 s (type *MockStore) 作为类型 *datastore.Storage这是由于我的 EventHandler 函数需要将 *datastore.Storage 作为参数类型传递。我想使用我创建的 MockStore 而不是真正的数据存储来测试(http 测试)EvenHandler()。我正在使用 golang testify 模拟包。一些代码示例type MockStore struct{  mock.Mock}func (s *MockStore) Get() ... func EventHandler(w http.ResponseWriter, r *http.Request, bucket *datastore.Storage){  //Does HTTP stuff and stores things in a data store  // Need to mock out the data store get/sets}// Later in my Testsms := MockStoreEventHandler(w,r,ms)
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

一些东西:

  • 创建一个将由datastore.Storage您的模拟商店实现的接口。

  • 使用上述接口作为参数类型 in EventHandler (not a pointer to the interface)

  • 将指针传递给您的MockStoreto EventHandler,因为该Get方法是为指向结构的指针定义的。

您更新后的代码应如下所示:

type Store interface {

   Get() (interface{}, bool) // change as needed

   Set(interface{}) bool

}


type MockStore struct {

   mock.Mock

}


func (s *MockStore) Get() ... 


func EventHandler(w http.ResponseWriter, r *http.Request,bucket datastore.Storage){

   //Does HTTP stuff and stores things in a data store

   // Need to mock out the data store get/sets

}



// Later in my Tests

ms := &MockStore{}

EventHandler(w,r,ms)


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信