Функция httptest.NewRequest
Функция httptest.NewRequest создает новый HTTP-запрос,
который можно использовать в тестах для проверки обработчиков.
Первый параметр принимает HTTP-метод (например, "GET", "POST"),
второй параметр принимает URL-путь, а третий параметр принимает
тело запроса в виде io.Reader или nil, если тело
не требуется. Функция возвращает указатель на http.Request,
который можно передать в тестируемый обработчик.
Синтаксис
httptest.NewRequest(method, target string, body io.Reader) *http.Request
Пример
Давайте создадим GET-запрос к пути "/users" без тела запроса:
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
req := httptest.NewRequest("GET", "/users", nil)
fmt.Println(req.Method)
fmt.Println(req.URL.Path)
}
Результат выполнения кода:
"GET"
"/users"
Пример
Давайте создадим POST-запрос с JSON-телом для создания нового пользователя:
package main
import (
"bytes"
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
jsonBody := []byte(`{"name":"John","age":30}`)
req := httptest.NewRequest("POST", "/users", bytes.NewReader(jsonBody))
fmt.Println(req.Method)
fmt.Println(req.URL.Path)
fmt.Println(req.Header.Get("Content-Type"))
}
Результат выполнения кода:
"POST"
"/users"
""
Обратите внимание, что заголовок Content-Type не устанавливается
автоматически - его нужно добавлять вручную при необходимости.
Пример
Давайте создадим запрос с пользовательскими заголовками:
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
req := httptest.NewRequest("GET", "/profile", nil)
req.Header.Set("Authorization", "Bearer token123")
req.Header.Set("X-Request-ID", "12345")
fmt.Println(req.Header.Get("Authorization"))
fmt.Println(req.Header.Get("X-Request-ID"))
}
Результат выполнения кода:
"Bearer token123"
"12345"
Пример
Давайте создадим запрос с параметрами в URL:
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
req := httptest.NewRequest("GET", "/search?q=golang&page=2", nil)
query := req.URL.Query()
fmt.Println(query.Get("q"))
fmt.Println(query.Get("page"))
}
Результат выполнения кода:
"golang"
"2"
Смотрите также
-
структуру
httptest.ResponseRecorder,
которая используется для записи ответов обработчиков в тестах -
пакет
httptest,
который предоставляет инструменты для тестирования HTTP-серверов -
функцию
testing.T.Run,
которая запускает подтесты для организации тестов -
функцию
testing.T.Log,
которая выводит отладочную информацию во время выполнения теста