0

我正在尝试使用 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)

这会导致以下情况出现恐慌:

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)

这不会惊慌,但最终不会改变Result.

关于我做错了什么的任何想法?

4

0 回答 0