#go
#Вперед
Вопрос:
Я пытаюсь протестировать приложение, которое предоставляет информацию на основе IP-адреса. Однако я не могу найти, как установить IP-адрес вручную. Есть идеи?
func TestClientData(t *testing.T) {
URL := "http://home.com/hotel/lmx=100"
req, err := http.NewRequest("GET", URL, nil)
if err != nil {
t.Fatal(err)
}
req.RemoveAddr := "0.0.0.0" ??
w := httptest.NewRecorder()
handler(w, req)
b := w.Body.String()
t.Log(b)
}
Комментарии:
1. вам просто нужно
s/RemoveAddr/RemoteAddr/
? Именно там обработчик будет искать IP-адрес клиента.
Ответ №1:
Правильная строка будет:
req.RemoteAddr = "0.0.0.0"
Вам не нужно := . Это не сработает, потому что вы не создаете новую переменную.
Вот так (на игровой площадке http://play.golang.org/p/_6Z8wTrJsE ):
package main
import (
"io"
"log"
"net/http"
"net/http/httptest"
)
func handler(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Got request from ")
io.WriteString(w, r.RemoteAddr)
}
func main() {
url := "http://home.com/hotel/lmx=100"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
// can't use := here, because RemoteAddr is a field on a struct
// and not a variable
req.RemoteAddr = "127.0.0.1"
w := httptest.NewRecorder()
handler(w, req)
log.Print(w.Body.String())
}