2017-09-16 108 views
0

Go程序使用連接字符串連接到數據庫。目前該連接字符串存儲在一個環境變量中。Go - 集成測試使用測試數據庫連接

我的挑戰是編寫一個自動化測試,對測試數據庫執行該程序。

我以爲我會在測試的init()函數中設置連接字符串環境變量,但在測試init()之前調用主程序的init()函數,所以這不起作用。

解決方法似乎是默認連接到測試數據庫的字符串。如果沒有定義環境變量,則使用測試;如果它被定義(生產),那就用它來代替。

是否有替代方案?有更好的方法嗎?

+0

你的程序使用的db連接是全局的嗎?如果是的話,就讓你的測試創建一個測試連接並將其設置爲全局變量的值。 – mkopriva

+0

'var db = DB.getConnectionUsingEnvironmentVariable()' –

+0

這是在主程序中。這目前恐慌。我可以更改它,以便在環境變量缺失時不嘗試創建連接,並且一旦設置了環境變量,就會從測試中調用相同的代碼。這是你想到的嗎? –

回答

0

我目前的解決方案是使連接成爲未初始化的全局。該函數檢查連接是否爲零 - 如果是,它將初始化它。該測試有一個setup()函數,用於設置與集成測試數據庫的連接 - 另一種方法是讓測試只設置環境變量。

+0

如果你使用mysql我建議https://github.com/DATA-DOG/go-sqlmock如果你不想自己模擬結構。 – reticentroot