仅为_test.go文件定义结构

时间:2017-03-15 22:37:57

标签: unit-testing testing go

我有以下文件树结构:

struct stat fileStat;
owner = fileStat.st_uid;
if(owner == getuid()){
...
}

我需要在-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中看到并使用它,因为_test.go文件不会导出名称。

我在哪里定义proto_test.go以便它在两个包中都可用? 我想避免在文件中定义它,以便在核心(非测试)包中也可以看到该名称。

2 个答案:

答案 0 :(得分:3)

如果你需要在两个不同的包中使用模拟,那么模拟不能存在于测试文件中(以_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

答案 1 :(得分:-1)

如果您不需要测试未曝光的功能,可以在所有测试中使用<package>_test包。

编辑:我不明白这些downvotes。 You can find the practice in the standard library.