亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調用同一包中的函數和變量,但使用構建標記調用不同的文件

調用同一包中的函數和變量,但使用構建標記調用不同的文件

Go
肥皂起泡泡 2022-08-24 16:16:02
我正在設置一些集成測試,這是我在src代碼的單獨測試包中完成的。這樣做是為了防止循環依賴關系。單元測試不存儲在此處,它們與正在測試的文件一起存儲。我的 golang 項目層次結構如下所示:cmd public ...testing/ main_test.go database_test.go在main_test.go中,我計劃初始化與外部依賴項(例如我的測試數據庫)的連接。package teststype Database struct {...}var DB Databasefunc TestMain(m *testing.M){ SetUpDatabase() exitCode := m.Run() os.Exit(exitCode)}database_integration_test.gofunc Test(t *testing.T) {    tests := []struct {        title string        run   func(t *testing.T)    }{        {"should make query", testQuery},    }    for _, test := range tests {        t.Run(test.title, func(t *testing.T) {            test.run(t)        })    }}func testQuery(t *testing.T) {    var r result.Result    err := DB.database.DoQuery("").Decode(&r)    if err != nil {        t.Errorf(err.Error())        t.Fatal()    }}此設置在我運行時有效,但是,我想向這些文件或類型添加構建標記:但是,一旦我使用構建標記,database_integration_test.go文件就無法看到初始化的數據庫類型。我該如何阻止這種情況?另外作為旁注,我應該更改main_test.go的名稱。我只是這么稱呼它,因為main是站立的入口點。// +build integration
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

首先,關于這一點:

另外作為旁注,我應該更改main_test.go的名稱。我只是這么稱呼它,因為main是標準的入口點。

我認為將其命名為main_test.go令人困惑,因為它可能表明您正在測試此文件中的main函數(根據慣例)golang

其次,關于這一點:

但是,一旦我使用 build 標記,database_integration_test.go 文件就看不到初始化的數據庫類型。我該如何阻止這種情況?

生成約束(也稱為生成標記)用于在生成過程中包含或排除包中的文件。有了這個,我們可以從相同的源代碼構建不同類型的構建。

因此,如果您沒有看到數據庫類型初始化,則很可能數據庫類型的定義和集成測試使用不同的構建標記進行標記。確保它們存在于相同的生成標記中。另外,我認為您可以使用多個構建標記來標記文件。所以你也可以嘗試一下。

有關構建標簽的更多詳細信息,請查看Dave Cheney的以下文章


查看完整回答
反對 回復 2022-08-24
?
翻過高山走不出你

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


查看完整回答
反對 回復 2022-08-24
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號