Скажем, у меня очень простой веб-сервис.
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, это переустановка дескрипторов в инициализации тестового файла, например:
func init() {
http.HandleFunc("/", sanityTest)
}
, что приводит к дублированию, и я неизбежно должен создать функцию вmain.go вроде:
func setupRoutes() {
http.HandleFunc("/", sanityTest)
}
Что я нахожу немного уродливым.Я пропустил трюк для создания экземпляров маршрутов из main.go и избежать инициализации?