2016-07-20 8 views
1

こんにちは私は新しいです。私はenv変数からいくつかの設定を取得する簡単なアプリケーションを書いています。私は以下のようにinit関数でこれを行います。Golang:init()funcを使ったテスト

type envVars struct { 
    Host  string `env:"APP_HOST"` 
    Username string `env:"APP_USERNAME"` 
    Password string `env:"APP_PASSWORD"` 
} 

var envConfig envVars 

func init() { 
    if err := env.Parse(&envConfig); err != nil { 
     log.Fatal(err) 
    } 
} 

私は、env変数が正しく読み取られていることを確認するテストを書いています。しかし、問題は私のプログラムのinit関数が私のテストのinit関数の前でさえ呼び出されるということです。私のプログラムのinit関数が呼び出される前に何らかの設定をすることができる方法はありますか?

func init() { 
    os.Setenv("APP_HOST", "http://localhost:9999") 
    os.Setenv("APP_USERNAME", "john") 
    os.Setenv("APP_PASSWORD", "doe") 
} 

func TestEnvConfig(t *testing.T) { 
    assert.NotNil(t, envConfig) 
    assert.Equal(t, "http://localhost:9999", envConfig.Host) 
} 
+1

init関数のポイントは、他のすべての関数の前に自動的に呼び出されます。 initの前に何かできるようにするには、initの外に移動する必要があります。 (env変数を読むことは、通常はテストするものではありません。それらを読み込むコードは別々にテストする必要があります) – JimB

答えて

0

Goテスト機能は独立しており、1つの機能をテストする必要があります。しかし、この場合は、他の方法に依存していますが、これは実際にテストするには適していません。そしてinit()はコード実行の第一歩としてロードされるもので、テストメソッドでinitを使うのは実際にこれを行う正しい方法だとは思いません。

関連する問題