# #go #testing
Вопрос:
Допустим, я тестирую функцию, которая вызывает веб-службу, и над этой службой издеваются httptest.NewServer
func TestSomeFeature(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) })) SomeFeature(server.URL, "foo") } func SomeFeature(host, a string) { if a == "foo" { http.Get(fmt.Sprintf("%v/foo", host)) } if a == "bar" { http.Get(fmt.Sprintf("%v/bar", host)) } }
Как я могу утверждать, что сервер был вызван с правильным URL /foo
-адресом, и провалить тест, если он был вызван с неправильным URL-адресом или вообще не вызывался?
Ответ №1:
Ты можешь сделать это вот так:
func TestSomeFeature(t *testing.T) { called := false server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // assert that strings.Contains(r.RequestURI, "/foo") is true called = true w.WriteHeader(200) })) SomeFeature(server.URL, "foo") // assert that called is true }
Комментарии:
1. Нет ли проблем с параллелизмом, если я запускаю несколько из них параллельно с одним и тем же
server
?2. @TimoHuovinen конечно, приведенный выше код предназначен для последовательного тестирования, вы не указали параллелизм в своем вопросе