我的 golang 庫中有一些測試助手代碼,我想在各種子包中進行測試時使用這些代碼。但是,我遇到了一個障礙:outer|+- test_helpers_test.go|+- inner | +- something.go +- something_test.go要使用中的代碼test_helpers_test.go,我必須導入外包。但是當我從中導入外包時something_test.go,它會抱怨“測試中不允許導入周期”所以我嘗試為共享測試助手制作一個包:outer|+- test| || +- test_helpers_test.go|+- inner | +- something.go +- something_test.go現在它抱怨“/home/karl/Projects/outer/test 中沒有非測試 Go 文件”我不想調用它,test_helpers.go因為它是我的測試代碼的一部分,而不是我的庫代碼。我不想在庫中發布該代碼。我該如何解決這個問題?更新:我可以通過dummy.go在目錄中創建一個文件來解決這個問題test,但現在有一個新問題:導入一個包不會導入它的測試代碼!所以現在我得到:./something_test.go:12:2: undefined: test.AssertDoesPanic
2 回答

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
你是對的,你不能從另一個包導入測試代碼,所以你的輔助函數必須進入正確的代碼文件而不是測試文件。
如果它不是從您的非測試代碼中導入的,那么它就不會被構建到最終的二進制文件中。
作者傾向于調用該包...test
來表明它只是測試助手,例如httptest
來自標準庫或zaptest
來自開源。

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
在go issue 8279之后,我看到添加了虛擬文件,如tommie/acme-cli
提交 479f8c7
outer/outer.go //?+build?ignore+ package?outer
作為一種解決方法,看看這是否對這里有幫助。
如上所述,在內部包(來自 Go 1.4+)中使用測試助手代碼是另一種選擇,因為該項目的任何客戶端都無法訪問該助手。見設計文件。您可以在典型的 Go 項目布局
中看到它的使用。
- 2 回答
- 0 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消