2015-10-23 4 views
-1

Я издеваюсь над DataStore, и это функция Get/Set. У меня есть проблема: не могу использовать s (тип * MockStore) как type * datastore.Storage в аргументе EventHandlerGolang Mocking - проблемы с типом столкновения

Это вызвано моей функцией EventHandler, которая должна быть передана * datastore.Storage как тип аргумента , Я хочу протестировать (http-тест) EvenHandler() с помощью MockStore, который я создал вместо реального хранилища данных. Я использую пакет golang testify mock.

Некоторых примеры кода

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) 

ответ

1

несколько вещей:

  • Создать интерфейс, который будет реализован как по datastore.Storage и вашему макету магазина.
  • Используйте приведенный выше интерфейс как тип аргумента в EventHandler(not a pointer to the interface).
  • Передайте указатель на ваш MockStore на номер 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) 
+0

Я работал с этим - но это не похоже, чтобы решить основную проблему в качестве аргумента «ведра» EventHandler существа типа datastore.Storage. В вашей строке EventHandler (w, r, ms) ms - структура MockStore. Таким образом, ошибка: нельзя использовать тип MockStore как тип хранилища данных. Хранилище все еще существует. –

+0

@HackingLife: Я только что обновил свой ответ; посмотрите, помогают ли эти изменения. –

+0

Хорошая сделка - это отлично работает –

Смежные вопросы