2017-09-16 6 views
0

goプログラムは接続文字列を使用してデータベースに接続します。現在、その接続文字列は環境変数に格納されています。Go統合テストでテストデータベース接続を使用する

私の挑戦は、テストデータベースに対してプログラムを実行する自動テストを作成することです。

私はテストのinit()関数で接続文字列環境変数を設定すると思っていましたが、メインプログラムのinit()関数はテストinit()の前に呼び出されます。

回避策は、接続文字列をテストデータベースにデフォルト設定することです。環境変数が定義されていない場合は、testを使用します。それが定義されていれば(プロダクション)、それを代わりに使用してください。

代替手段はありますか?より良いアプローチがありますか?

+0

プログラムで使用されているdb接続はグローバルですか?はいの場合は、テストconnを作成してグローバル変数の値として設定してください。 – mkopriva

+0

'var db = DB.getConnectionUsingEnvironmentVariable()' –

+0

これはメインプログラムにあります。これは現在パニックです。環境変数を設定したら、環境変数がない場合は接続を作成せず、テストから同じコードを呼び出すように変更することができます。これはあなたが念頭に置いていたものですか? –

答えて

0

私の現在の解決策は、接続を初期化されていないグローバルにすることです。この関数は、接続がnilかどうかをチェックし、接続されている場合は初期化します。テストには、統合テストデータベースへの接続を設定するsetup()関数があります。代わりに、環境変数を設定するだけのテストがあります。

+0

自分で構造をモックしたくない場合は、mysqlを使用している場合はhttps://github.com/DATA-DOG/go-sqlmockをお勧めします。 – reticentroot

関連する問題