2 回答

TA貢獻1784條經驗 獲得超9個贊
首先,關于這一點:
另外作為旁注,我應該更改main_test.go的名稱。我只是這么稱呼它,因為main是標準的入口點。
我認為將其命名為main_test.go令人困惑,因為它可能表明您正在測試此文件中的main函數(根據慣例)golang
其次,關于這一點:
但是,一旦我使用 build 標記,database_integration_test.go 文件就看不到初始化的數據庫類型。我該如何阻止這種情況?
生成約束(也稱為生成標記)用于在生成過程中包含或排除包中的文件。有了這個,我們可以從相同的源代碼構建不同類型的構建。
因此,如果您沒有看到數據庫類型初始化,則很可能數據庫類型的定義和集成測試使用不同的構建標記進行標記。確保它們存在于相同的生成標記中。另外,我認為您可以使用多個構建標記來標記文件。所以你也可以嘗試一下。
有關構建標簽的更多詳細信息,請查看Dave Cheney的以下文章

TA貢獻1875條經驗 獲得超3個贊
您可以簡單地將標志添加到您的:TestMain
var isIntegration bool
func init() {
flag.StringVar(&isIntegration, "mytest.integration", "Set flag to set up DB for integration tests")
}
func TestMain(t *testing.M) {
SetUpDatabase(isIntegration)
//etc...
}
然后,只需根據參數是否為 或 來讓調用不同的、未導出的函數即可。這將是獲取行為的快速方法,而不必過多地使用自定義構建約束。特別是考慮到您正在運行測試,而不是像這樣構建應用程序。SetUpDatabasetruefalse
就重命名而言:我不明白為什么你需要改變它。它按照它在錫上所說的去做。當其他人想要查看測試的結構/運行方式,或者添加了哪些可能的標志時,只需檢查目錄并查找文件(以及 ,這將是我查找的第一個文件)要容易得多。任何其他名稱,如 、 、 、 ...只會把水攪渾。main_test.gomain_test.goinit.gosetup_integration_test.gointegration_setup_test.gointegration_start_test.go
- 2 回答
- 0 關注
- 113 瀏覽
添加回答
舉報