Gomock SetArg () паникует - PullRequest
       40

Gomock SetArg () паникует

0 голосов
/ 06 февраля 2020

Я пытаюсь использовать 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.

Есть идеи относительно того, что я делаю неправильно?

...