首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅为_test.go文件定义结构

仅为_test.go文件定义结构
EN

Stack Overflow用户
提问于 2017-03-15 22:37:56
回答 2查看 869关注 0票数 3

我有以下文件的树结构:

代码语言:javascript
复制
-app/
---tool/
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go

我需要使用一个(虚拟)结构来实现tool_test.goproto_test.go中的接口

代码语言:javascript
复制
type DummyRetriever struct{}

func (dummy *DummyRetriever) Retrieve(name string) (string, error) {
  return "", nil 
}

如果我只在tool_test.go中定义它,我就无法在proto_test.go中看到和使用它,因为_test.go文件不会导出名称。

我应该在哪里定义DummyRetriever,以便使它在两个包中都可用?我希望避免让它在文件中定义,这样名称在核心(非测试)包中也是可见的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 22:51:34

如果您需要在两个不同的包中使用模拟,则模拟不能存在于测试文件(以_test.go结尾的文件)中。

如果您不关心在哪里使用模拟,那么只需创建一个mock包并放在那里。

代码语言:javascript
复制
-app/
---tool/
-----mock/
-------/dummyretriever.go
-------/othermock.go
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go

如果您只希望从该包或其后代中使用模拟,那么将其放入internal包中。

代码语言:javascript
复制
-app/
---tool/
-----internal/
-------/dummyretriever.go
-------/othermock.go
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go
票数 5
EN

Stack Overflow用户

发布于 2017-03-16 01:00:30

如果不需要测试未公开的函数,则可以在所有测试中使用<package>_test包。

编辑:我不明白这些下注。您可以在标准库中找到实践。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42822036

复制
相关文章

相似问题

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