假设我有一个非常简单的 Web 服务。
func main() {
http.HandleFunc("/", sanityTest)
log.Fatal(http.ListenAndServe(":8000", nil))
}
如果我想测试它,我至少可以拥有:
func ExampleTest() {
server := httptest.NewServer(http.DefaultServeMux)
defer server.Close()
resp, err := http.Get(server.URL)
if err != nil {
log.Fatal(err)
}
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(resp.Header.Get("Content-Type"))
fmt.Println(string(body))
// Output:
// 200
// text/plain; charset=utf-8
// OK
}
但这将导致 404,因为它不知道路由。所以我看到 main_test.go 代码所做的是在测试文件的 init 中重新设置句柄,如下所示:
func init() {
http.HandleFunc("/", sanityTest)
}
这会导致重复,不可避免地我必须在 main.go 中创建一个函数,例如:
func setupRoutes() {
http.HandleFunc("/", sanityTest)
}
我觉得有点难看。我是否缺少从 main.go 实例化路由并避免 init 的技巧?
白衣非少年
相关分类