Go test http handler

Een paar woorden over testen van de web handlers

De handlers

Een webserver handler heeft als parameters altijd een writer en een request object.

Func blablaHandler(w httpResponceWriter, r *http.Request) {
	text := r.FormValue("v")
	if text == "" {
		http.Errorf(w,"missing value")
		return
	}
	
	fmt.Fprintln(w, text +" "+ text)
}

In de handler wordt het request gelezen. En het resultaat van de blabla handler funktie wordt via de Fprintln weggeschreven in de Writer Als in bovenstaande handler in het request “kletsen” als waarde wordt meegegeven, wordt in de writer “kletsen kletsen” geschreven.

De test

In een test van een handler kan je gebruik maken van een gewoon http.Request{}

req := http.NewRequest("GET", "localhost/blabla?v=gepraat",nil)

Bij de writer is dat een ander verhaal want de writer verwijst naar een interface. Je zou dus je eigen test writer kunnen maken die handige dingen doet, maar er bestaat al een goede test writer. Je kan het beste de httptest.Recorder gebruiken. Deze handige writer neemt als het ware de resultaten van de bewerking in de handler op, en daar kan je dan in de test naar kijken.

rec := httptest.NewRecorder()

We hebben nu een handler, een request en een writer, en kunnen daarmee een test gaan uitvoeren:

blabla(rec,req)

res := rec.Result()
defer res.Body.Close()

if res.Body != "gepraat gepraat" {
	t.Fatal("expected gepraat gepraat; got %s,res.Body)
}

En zo test je dus een http handler

 Share!

 
comments powered by Disqus