假设我有两个包,并且(因此,、 、 和 .) 取决于。在 中,我想使用一些在 中定义的伪造类型。但是由于不允许文件导出类型,因此我将它们移动到 测试包中,即,两者都依赖于。foobarfoo.gofoo_test.gobar.gobar_test.gobarfoobar_test.gofoo_test.go*_test.gofoofootestfoobar


假设有一些这样的接口:foo.go


type A interface {

   AFunc() err

}


type B interface {

   BFunc() (A, error)

}

和 中,我想用 fakes 实现这些接口:footest.go


type FakeA struct {}


type FakeB struct {}


func (fa *FakeA) AFunc() error {

   // this does something

}


func (fb *FakeB) BFunc() (A, error) {

   // this does something and returns an instance of A

}

这不起作用,因为它会创建循环依赖项。 依赖,但也需要依靠才能引用。foofootestfootestfooA


我是否错过了某种最佳实践,使我能够避免此问题?我的印象是,当测试文件需要在其他包中使用伪造的类型时,创建测试包(如 )是标准做法,但是如果有更好的方法,我希望得到纠正。footest