2017-03-15 45 views
2

我的文件下面的樹結構:定義一個struct來_test.go文件只

-app/ 
---tool/ 
-----/tool_test.go 
-----/tool.go 
-----/proto/proto.go 
-----/proto/proto_test.go 

我需要使用(虛擬)結構在兩個tool_test.goproto_test.go實現一個接口:

type DummyRetriever struct{} 

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

如果我只在tool_test.go中定義它,我不能在proto_test.go中看到並使用它,因爲_test.go文件不會導出名稱。

我在哪裏定義DummyRetriever,以便它們在兩個包中均可用? 我想避免讓它在文件中定義,以便在覈心(非測試)軟件包中顯示該名稱。

+2

因此,其中一個做法是將mock放在一個單獨的包中https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1#f68c(請參閱#3) – zerkms

+0

謝謝@zerkms,基本上與MahlerFive相同的答案.... – faboolous

回答

2

如果您需要兩個不同軟件包中的模擬,模擬不能存在於測試文件中(文件以_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 
相關問題