Go Can';用于测试的t模拟结构

Go Can';用于测试的t模拟结构,go,Go,正在尝试模拟结构进行测试。但以下代码有一个错误: ./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

正在尝试模拟结构进行测试。但以下代码有一个错误:

./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{}
}
结构
迭代器
不在我的控制之下。这些结构来自外部库

  • 创建一个表示组件所需的业务逻辑的接口。不要使用任何第三方类型
  • 在业务逻辑中使用该接口
  • 创建此接口包装第三方库的实现,并将其传递到
    main.go
    中的组件,这是连接/注入各种系统组件的好地方
  • 这样,如果有一天您决定不使用此第三方库,您可以轻松地模拟您的界面,并将实现更改为另一个

    如果由于某种原因您被绑定到此库,并且无法创建不引用第三方类型的接口,那么请查看

    “为什么我不能这样做?”对于要实现接口的类型,其方法必须与接口的方法逐字匹配
    Query()*Iterator
    Query()mockIterator
    不匹配,即使
    *Iterator
    类型实现了
    mockIterator
    接口也没关系,这两种方法根本不一样,因此
    Class
    不实现
    mockClass