2015-07-28 3 views
3

У меня есть небольшой сервис, написанный на Go. Я уже тестирует его httptest и др, но я насмешливый базу данных и т.д ...Тесты интеграции Golang HTTP

То, что я хотел бы сделать:

  • Пустите тот же сервер, я использую в производство с пустой базой данных
  • Запуск тестов против него с помощью HTTP
  • Получите охват этих тестов

пустая часть базы данных не является проблемой, так как я сделал все, конфигурируемый с помощью собственной переменные окружения.

сделать запросы к нему тоже не проблема, так как это просто стандартный код Go ...

Проблема: Я не знаю, как запустить сервер таким образом, чтобы я мог измерить его охват (и это подпакеты). Кроме того, основной код сервера находится внутри функции main ... Я даже не знаю, могу ли я позвонить из другого места (я пробовал стандартный путь, но не с отражением и т. Д.).

Я вроде как использую Go, так что я мог бы говорить глупости.

+0

Вы когда-нибудь выясняли, как получить код покрытия этих тестов интеграции httptest? –

+0

@AaronGreenlee к сожалению нет. – caarlos0

ответ

4

Вы можете запустить HTTP-сервер в своем тесте и сделать запросы против него.

Для более удобного использования вы можете использовать httptest.Server в тесте и предоставить ему свой основной http.Handler. В коде httptest.Server есть несколько способов лучше контролировать запуск и остановку сервера, а также поле URL, чтобы предоставить вам локальный адрес сервера.

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintln(w, "Hello, client") 
})) 
defer ts.Close() 

res, err := http.Get(ts.URL) 
if err != nil { 
    log.Fatal(err) 
} 
greeting, err := ioutil.ReadAll(res.Body) 
res.Body.Close() 
if err != nil { 
    log.Fatal(err) 
} 

fmt.Printf("%s", greeting) 
+0

понял ... есть ли способ интегрировать его с моими уже созданными обработчиками? Я считаю, что я не был ясен ... Я хочу проверить тот же код, который идет на производство ... маршруты, middlewares ... все ... Я изучу этот httptest.Server, но, похоже, он будет не работает с моим echo (https://github.com/labstack/echo) кодом:/Спасибо, BTW! – caarlos0

+1

@ caarlos0: конструкторы httptest.Server берут http.Handler в качестве аргумента. Вы можете подключить любые обработчики, мультиплексоры и т. Д., Как вы хотели бы со стандартным http.Server. – JimB

+0

Это пример модульного тестирования для 'net/http'. Интеграционные тесты могут запрашиваться без привлечения обработчиков в тестах, как если бы они находились внутри внешнего удаленного api. –

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