Дразнить функцию, которая вызывается внутри Holtt Holp Golang - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно протестировать функцию, которая выглядит следующим образом:

func parmHandler(w http.ResponseWriter, r *http.Request) {
   ...
   data, err = backenddb_call(r *http.Request)
   ...
   return
}


function backenddb_call(r *http.Request) (data []Data, err error){
   parm := r.URL.Query().Get(parm)
   //Get Data from DB for parm 
   ...
   return
}

В этом случае обработчика HTTP я не могу изменить аргументы parmHandler и добавить аргумент вспомогательного интерфейса, чтобы помочь с имитацией,Как я могу издеваться над backenddb_call, чтобы вернуть разные ответы?

1 Ответ

0 голосов
/ 28 февраля 2019

У вас может быть функция, которая возвращает ваш обработчик, который вы передаете backenddb_call в качестве аргумента:

https://play.golang.org/p/aSMxeEgJL8U

func GetHandler(fn func (r *http.Request) ([]Data, error)) http.Handler {
    return http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
        data, err := fn(r)
        fmt.Println(data, err)
    })
}

Затем, когда вы создаете его:

http.HandleFunc("/test", GetHandler(backenddb_call))

и для проверки вы можете просто передать другой вызов:

GetHandler(func (r *http.Request) ([]Data, error) {
    fmt.Println("Mock")
    return []Data{"This", "Is", "A", "Fake", "Response"}, nil
})
...