2017-07-05 58 views
0

我有一個測試軟件包,用於測試一些依賴於讀取配置的東西。我想運行的所有測試之前曾經讀到過這樣的配置,所以我試圖用TestMain(m *testing.M)TestMain not run

main.go:

package tests 

import (
    ... 
) 

var logger = logging.MustGetLogger("tests") 

func TestMain(m *testing.M) { 
    logger.Info("Initializing test suite") 

    viper.SetConfigName("config") 
    viper.AddConfigPath("..\\..\\") 
    err := viper.ReadInConfig() 
    if err == nil { 
     os.Exit(m.Run()) 
    } else { 
     logger.Fatal("Could not read configuration") 
    } 
} 

和我在同一個目錄(包),另一個文件用測試。

repository_test.go:

package tests 

import (
    ... 
) 

func TestCreation(t *testing.T) { 
    aa := myModule.CreateRepository() 
    assert.NotNil(t, aa) 
} 

我的問題是,由於配置不從文件中讀取測試失敗。當我嘗試調試Gogland中的測試時,TestMain內部的斷點未被命中。當我從命令行運行測試時,我看不到TestMain的任何打印輸出。

有什麼特別的我應該做,使其工作?從我在線閱讀的內容中瞭解到,如果我定義了TestMain(m *testing.M),那麼它將只運行一次包,這就是我應該編寫任何安裝或拆卸代碼的地方。

+1

測試套件中的所有文件(包括定義'TestMain'的文件)必須以'* _test.go'結尾。重命名爲例如'main_test.go' – putu

+0

@putu omg!那一定是吧。我現在覺得自己像個白癡。一旦我靠近我的電腦,就會檢查! – Dina

+0

是的,事實確實如此。那麼,至少現在我確信這永遠不會再發生在我身上。 – Dina

回答

3

TestMain僅在測試文件中執行(後綴_test.go)。

將函數移到repository_test.go文件來解決這個問題。

0

確保運行配置設置爲「運行時不打包文件」編輯配置... |去測試|你的配置名稱,這應該工作。如果沒有,請發佈IDE運行的命令來執行測試。

+1

謝謝。我現在不在我的電腦旁邊。我稍後再試。但是從命令行運行怎麼樣?我也需要這個在TeamCity上工作。在TeamCity上,我們使用'go test -v path/tests' – Dina

+0

這就是運行特定文件和Package(或Directory)之間的區別。在TeamCity中,除非手動指定所有文件,否則該路徑看起來像一個目錄/包。如果您指定該文件,Go將只在單個文件中運行測試功能。請讓我知道配置更改是否有幫助。 – dlsniper

相關問題