2017-07-21 16 views
0

func mainをテストするにはどうすればよいですか?このように:ジンアプリケーションの主な機能をテストするには?

func main(){ 
    Engine := GetEngine() // returns gin router with handlers atttached 
    Engine.Run(":8080") 
} 

それだけで2行がありますが、私は彼らがカバーしているしたいと思います。 TestMain'はテスト準備のために予約されています。つまり、mainのテストは言語作成者によって計画されていませんか? コンテンツを別の関数mainRealに移動することはできますが、それはエンジニアリング上の問題ですか?ジンをテストする方法

はよく開始しましたか?別のゴルーチンでmainを起動し、返信を確認して停止できますか?

ありがとうございました。

P.S.重複している可能性があるのは、func main()自体のテストではなく、外部に移動するためのアイデアであり、異なる問題とアプローチが含まれているためです。

+0

可能な複製(https://stackoverflow.com/questions/31352239/how-to-test-the-main-package [golangでメインパッケージの機能をテストする方法?] -functions-in-golang) – Nebril

+0

私はその投稿を見ましたが、それは同じではない、いくつかの異なる側面があります。 –

答えて

0

解決策。

mainからmain()ファンクションを同じ方法でテストすることができます。ちょうどTestMainという名前を付けないでください。私は別のゴルーチンとして起動し、それに接続してリクエストを実行しようとします。

私はシンプルなJSON {"status": "ok"}で応答しなければならないauxilaryハンドラに接続することを決めました。私の場合は :の

func TestMainExecution(t *testing.T) { 
    go main() 
    resp, err := http.Get("http://127.0.0.1:8080/checkHealth") 
    if err != nil { 
      t.Fatalf("Cannot make get: %v\n", err) 
    } 
    bodySb, err := ioutil.ReadAll(resp.Body) 
    if err != nil { 
      t.Fatalf("Error reading body: %v\n", err) 
    } 
    body := string(bodySb) 
    fmt.Printf("Body: %v\n", body) 
    var decodedResponse interface{} 
    err = json.Unmarshal(bodySb, &decodedResponse) 
    if err != nil { 
      t.Fatalf("Cannot decode response <%p> from server. Err: %v", bodySb, err) 
    } 
    assert.Equal(t, map[string]interface{}{"status": "ok"}, decodedResponse, 
      "Should return status:ok") 
} 
関連する問題