2017-02-13 6 views
-1

Я запускаю UT на некоторых вызовах отдыха, создавая тестовый сервер http на языке go. Мой код выглядит следующим образом.Использование пользовательского url для httptest.NewServer Go lang

type student struct{ 
FirstName string 
LastName string 
} 

func testGetStudentName() { 
    testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
    response = new(student) 
    response.FirstName = "Some" 
    response.LastName = "Name" 
    b, err := json.Marshal(response) 
    if err == nil { 
      fmt.Fprintln(w, string(b[:])) 
     } 
    })) 
    defer ts.Close() 
    student1 := base.getStudent("123") 
    log.Print("testServerUrl",testServer.URL) //prints out http://127.0.0.1:49931 (port changes every time this is run) 

    ts.URL = "http://127.0.0.1:8099" //this assignment does not quite change the URL of the created test server. 
} 

В файле испытывается,

var baseURL = "http://originalUrl.com" 
var mockUrl = "http://127.0.0.1:49855" 
func Init(mockServer bool){ 
    if mockServer { 
     baseURL = mockUrl 
    } 
} 

func getStudent(id String){ 
    url := baseUrl + "/student/" + id 
    req, err := http.NewRequest("GET", url, nil) 
} 

Этот INIT вызывается из моего теста.

Это создает новый тестовый сервер и выполняет вызовы на случайном порту. Возможно ли запустить этот сервер на указанном порту?

+0

У меня есть несколько API, которые я испытываю, и в этих функциях, я приобщать путь к базовому URL. В моей первоначальной функции у меня есть базовый URL-адрес, например «http://someserver.com» В разделе getStudent() Я изменяю это как baseUrl + "/ student/{id}" В getClass() я бы изменил to baseUrl + "/ class/{id}" Поскольку каждый из серверов httptest я создаю разные порты, я получаю 127.0.0.1:49855/student/1: getsockopt: connection failed –

+0

Надеюсь, мое редактирование имеет больше смысла. Я пытаюсь объяснить это как можно лучше. В файле, который я тестирую, у меня есть Init, вызываемый тестом для изменения базового URL-адреса Вроде, var baseURL = "http://originalUrl.com" var mockUrl = "http://127.0.0.1 : 49855" FUNC Init (mockServer BOOL) { если mockServer { \t \t BaseUrl = mockUrl \t} } –

+0

Поскольку я прилагая URL в каждом из API вызовов, он будет по-прежнему терпят неудачу. Как и я добавляю некоторое значение для url в функции getStudent, я бы тоже сделал в функции getClass. В основном URL-адрес изменяется внутри функций. С пользовательским URL/портом я могу указать конечный URL-адрес в testServer –

ответ

1

Большинство приложений используют порт, назначенный в NewServer или NewUnstartedServer, потому что этот порт не конфликтует с портом, используемым на компьютере. Вместо назначения порта они устанавливают базовый URL-адрес службы на test server's URL.

Если вы хотите установить порт прослушивания, выполните следующие действия:

// create a listener with the desired port. 
l, err := net.Listen("tcp", "127.0.0.1:8080") 
if err != nil { 
    log.Fatal(err) 
} 

ts := httptest.NewUnstartedServer(handler) 

// NewUnstartedServer creates a listener. Close that listener and replace 
// with the one we created. 
ts.Listener.Close() 
ts.Listener = l 

// Start the server. 
ts.Start() 

// Run your tests here. 

// Cleanup. 
ts.Close() 

 Смежные вопросы

  • Нет связанных вопросов^_^