Я пытаюсь использовать gomock для проверки интерфейса с именем SuccessHandler
для проверки функции.
Имеющиеся у меня интерфейсы:
type Item interface {
SetResults(results string)
}
type SuccessHandler interface {
HandleSuccess(item Item) error
}
И реализация Item
:
type MyItem struct {
Results string
}
func (i *MyItem) SetResults(results string) {
i.Results = results
}
Обратите внимание, что поскольку SetResults
изменяет структуру, она всегда реализуется на приемнике указателя .
Все, что я хочу сделать, - это установить результаты MyItem
, когда HandleSuccess()
вызывается с MyItem
в качестве аргумента, и изменение значения аргумента. Вот что я пытался сделать для макета:
var myItem *MyItem
mockSuccessHandler.EXPECT().HandleSuccess(gomock.Any()).
Do(func(item Item) error {
item.SetResults("results")
myItem = item.(*MyItem)
return nil
}).SetArg(0, successItem)
Это вызывает пани c со следующим:
panic: reflect.Set: value of type *MyItem is not assignable to type MyItem [recovered]
panic: reflect.Set: value of type *MyItem is not assignable to type MyItem
Затем я попытался изменить переменную, чтобы она была просто структурой :
var myItem MyItem
mockSuccessHandler.EXPECT().HandleSuccess(gomock.Any()).
Do(func(item Item) error {
item.SetResults("results")
myItem = *item.(*MyItem)
return nil
}).SetArg(0, successItem)
Это не паникует c, но не приводит к изменению значения Result
.
Есть идеи относительно того, что я делаю неправильно?