我正在使用gomock (源代码模式),并希望模拟一段代码,如下所示:
type foo interface {
MethodA() int
}
type Boo interface {
MethodB(f foo) string
}其中,未导出的foo接口用作MethodB()中的参数。在使用mockgen之后,模拟的MethodB()如下所示:
func (m &MockBoo) MethodB(f foo) string { ... }这是错误的,因为foo未导出且无法访问。
我想知道有没有办法解决这个问题。将foo设置为Mockfoo作为参数)?
PS。我也尝试了gomock reflect模式,但它也有同样的问题。
发布于 2021-10-25 11:51:30
若要测试私有类型,请在与该类型相同的包中声明测试。这样做将允许您访问私有符号。
示例
测试
package foo
import (
"testing"
"github.com/golang/mock/gomock"
)
func TestName(t *testing.T) {
con := gomock.NewController(t)
defer con.Finish()
boo := NewMockBoo(con)
var F foo
boo.EXPECT().MethodB(F)
if len(boo.MethodB(F)) > 0 {
t.Fail()
}
}生成mock
$ mockgen -source=foo.go -package foo -destination foo_mock.gofoo.go
package foo
type foo interface {
MethodA() int
}
type Boo interface {
MethodB(f foo) string
}运行测试:
$ go test -v
=== RUN TestName
--- PASS: TestName (0.00s)
PASS
ok foo 0.001shttps://stackoverflow.com/questions/69444070
复制相似问题