我有以下文件的树结构:
-app/
---tool/
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go我需要使用一个(虚拟)结构来实现tool_test.go和proto_test.go中的接口
type DummyRetriever struct{}
func (dummy *DummyRetriever) Retrieve(name string) (string, error) {
return "", nil
}如果我只在tool_test.go中定义它,我就无法在proto_test.go中看到和使用它,因为_test.go文件不会导出名称。
我应该在哪里定义DummyRetriever,以便使它在两个包中都可用?我希望避免让它在文件中定义,这样名称在核心(非测试)包中也是可见的。
发布于 2017-03-15 22:51:34
如果您需要在两个不同的包中使用模拟,则模拟不能存在于测试文件(以_test.go结尾的文件)中。
如果您不关心在哪里使用模拟,那么只需创建一个mock包并放在那里。
-app/
---tool/
-----mock/
-------/dummyretriever.go
-------/othermock.go
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go如果您只希望从该包或其后代中使用模拟,那么将其放入internal包中。
-app/
---tool/
-----internal/
-------/dummyretriever.go
-------/othermock.go
-----/tool_test.go
-----/tool.go
-----/proto/proto.go
-----/proto/proto_test.go发布于 2017-03-16 01:00:30
如果不需要测试未公开的函数,则可以在所有测试中使用<package>_test包。
编辑:我不明白这些下注。您可以在标准库中找到实践。
https://stackoverflow.com/questions/42822036
复制相似问题