猿问

Golang Mocking - 类型冲突问题

我正在模拟一个 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 Tests

ms := MockStore

EventHandler(w,r,ms)


MMTTMM
浏览 166回答 1
1回答

幕布斯7119047

一些东西:创建一个将由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 Testsms := &MockStore{}EventHandler(w,r,ms)
随时随地看视频慕课网APP

相关分类

Go
我要回答