首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gomock未公开的接口作为参数

Gomock未公开的接口作为参数
EN

Stack Overflow用户
提问于 2021-10-05 01:52:08
回答 1查看 119关注 0票数 3

我正在使用gomock (源代码模式),并希望模拟一段代码,如下所示:

代码语言:javascript
复制
type foo interface {
  MethodA() int
}

type Boo interface {
  MethodB(f foo) string
}

其中,未导出的foo接口用作MethodB()中的参数。在使用mockgen之后,模拟的MethodB()如下所示:

代码语言:javascript
复制
func (m &MockBoo) MethodB(f foo) string { ... }

这是错误的,因为foo未导出且无法访问。

我想知道有没有办法解决这个问题。将foo设置为Mockfoo作为参数)?

PS。我也尝试了gomock reflect模式,但它也有同样的问题。

EN

回答 1

Stack Overflow用户

发布于 2021-10-25 11:51:30

若要测试私有类型,请在与该类型相同的包中声明测试。这样做将允许您访问私有符号。

示例

测试

代码语言:javascript
复制
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

代码语言:javascript
复制
$ mockgen -source=foo.go -package foo -destination foo_mock.go

foo.go

代码语言:javascript
复制
package foo


type foo interface {
  MethodA() int
}

type Boo interface {
  MethodB(f foo) string
}

运行测试:

代码语言:javascript
复制
$ go test  -v 
=== RUN   TestName
--- PASS: TestName (0.00s)
PASS
ok      foo 0.001s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69444070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档