我有以下文件树结构:
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
以便它在两个包中都可用?
我想避免在文件中定义它,以便在核心(非测试)包中也可以看到该名称。
答案 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.