如何测试杜松子酒应用程序中的主要功能?
How to test main function in gin application?
如何测试 func main
?像这样:
func main(){
Engine := GetEngine() // returns gin router with handlers atttached
Engine.Run(":8080")
}
它只有 2 行,但我想将它们包含在内。
TestMain'
是为测试准备保留的,这是否意味着测试 main
不是语言创建者计划的?
我可以将内容移动到另一个函数 mainReal
但它似乎有些过度工程?
如何测试gin启动好?我可以在单独的 goroutine 中启动 main
,检查回复并停止它吗?
谢谢。
P.S。可能的重复不是精确的重复,因为它不是致力于测试 func main()
本身,而是致力于向外移动的想法,因此包含不同的问题和方法。
解决方案。
您可以用同样的方法测试包 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")
}
如何测试 func main
?像这样:
func main(){
Engine := GetEngine() // returns gin router with handlers atttached
Engine.Run(":8080")
}
它只有 2 行,但我想将它们包含在内。
TestMain'
是为测试准备保留的,这是否意味着测试 main
不是语言创建者计划的?
我可以将内容移动到另一个函数 mainReal
但它似乎有些过度工程?
如何测试gin启动好?我可以在单独的 goroutine 中启动 main
,检查回复并停止它吗?
谢谢。
P.S。可能的重复不是精确的重复,因为它不是致力于测试 func main()
本身,而是致力于向外移动的想法,因此包含不同的问题和方法。
解决方案。
您可以用同样的方法测试包 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")
}