我正在尝试使用 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
.
关于我做错了什么的任何想法?