0

我该如何测试func main?像这样:

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

它只有 2 行,但我想让它们覆盖。 TestMain'保留用于测试准备,这是否意味着main语言创建者没有计划测试?我可以将内容移动到另一个函数mainReal,但它似乎有些过度工程?

如何测试杜松子酒已经开始良好?我可以main在单独的 goroutine 中启动,检查回复并停止它吗?

谢谢。

PS 可能的重复不是精确的重复,因为它不是专门用于测试 funcmain()本身,而是用于移入外部的想法,因此包含不同的问题和方法。

4

1 回答 1

0

解决方案。

main()你可以用同样的方法从包中测试函数main,只是不要命名它TestMain。我将它作为一个单独的 goroutine 启动,而不是尝试连接到它并执行任何请求。

我决定连接到辅助处理程序,它应该用一个简单的 json 响应{"status": "ok"}。就我而言:

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")
}
于 2017-07-21T13:53:19.740 回答