【发布时间】:2023-03-18 15:20:01
【问题描述】:
试图模拟结构进行测试。但是下面的代码有错误:
./test.go:32:17: cannot use NewClass() (type *Class) as type mockClass in return argument:
*Class does not implement mockClass (wrong type for Query method)
have Query() *Iterator
want Query() mockIterator
为什么我不能这样做?
func NewClass() *Class {
return &Class{}
}
type Class struct{}
func (Class) Query() *Iterator {
return &Iterator{}
}
type Iterator struct{}
func (Iterator) Next() error {
return nil
}
type mockClass interface {
Query() mockIterator
}
type mockIterator interface {
Next() error
}
var newMock = func() mockClass {
return NewClass()
}
在测试中我想分配给newMock 类似的东西:
newMock = funcr() mockClass {
return &fakeClass{}
}
结构 Class 和 Iterator 不在我的控制之下。这些结构来自外部库。
【问题讨论】:
-
“为什么我不能这样做?” 对于实现接口的类型,其方法必须与接口的方法匹配逐字 .
Query() *Iterator和Query() mockIterator不匹配,即使*Iterator类型实现了mockIterator接口也没关系,这两个方法根本不一样,因此Class不实现mockClass.
标签: go