Pengenalan HTTP Test
HTTP Test pada golang sudah disediakan package khusus untuk membuat unit test terhadap fitur Web. Semua itu ada pada package net/http/httptest
https://golang.org/pkg/net/http/httptest/. Dengan menggunakan package ini, kita bisa melakukan unit test terhadap handler web yang sudah kita buat tanpa harus menjalankan aplikasi web-nya sehingga kita bisa langsung fokus terhadap handler function yang ingin kita test.
Method-method yang ada pada HTTP Test
httptest.NewRequest
merupakan function yang digunakan untuk membuathttp.Request
. Kita bisa menentukan method, url, body yang akan kita kirim sebagai simulasi unit test. Kita juga bisa menambahkan informasi tambahan lainnya pada request yang ingin kita kirim seperti header, cookie dan lain-lain.httptest.NewRecorder()
merupakan fungsi yang digunakan untuk membuatResponseRecorder
yang mana ini merupakan struct bantuan untuk merekam HTTP response dari hasil testing yang kita lakukan.
Cara implementasi HTTP Test
Kita coba untuk membuat handler yang bisa kita testing, pada postingan sebelumnya kita sudah bisa memnbuat HelloHandler
yang mana pada sesi kali ini kita akan tambahkan unit test untuk handler tersebut. Caranya yaitu kita buat file pada projek belajar-golang-web
dan buat file http_handler.go
.
package main
import (
"fmt"
"net/http"
)
func HelloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello World")
}
Jika kamu menggunakan vscode maka tinggal buka file yang sudah kita buat lalu hover cursor kita ke fungsi yg sudah kita buat dan klik kanan pilih Go: Generate Unit Tests for function
. Maka akan terbuat file http_handler_test.go
dengan isi seperti ini.
package main
import (
"net/http"
"testing"
)
func TestHelloHandler(t *testing.T) {
type args struct {
w http.ResponseWriter
r *http.Request
}
tests := []struct {
name string
args args
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
HelloHandler(tt.args.w, tt.args.r)
})
}
}
Lalu kita update fungsi tersebut dan kita akan melakukan implementasi httptest
package menjadi seperti ini.
func TestHelloHandler(t *testing.T) {
tests := []struct {
name string
want string
}{
{
name: "mencetak Hello World",
want: "Hello World\n",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, "http://localhost/hello", nil)
recorder := httptest.NewRecorder()
HelloHandler(recorder, request)
response := recorder.Result()
body, _ := io.ReadAll(response.Body)
bodyString := string(body)
if !reflect.DeepEqual(bodyString, tt.want) {
t.Errorf("response = %v, want %v", bodyString, tt.want)
}
})
}
}
Ketika kita jalankan unit test tersebut dengan perintah dibawah ini
go test
maka hasilnya jika sudah sesuai akan menghasilkan seperti ini
➜ belajar-golang-web git:(main) ✗ go test
PASS
ok github.com/santekno/belajar-golang-web 0.984s
Membuat Web Golang 01 Pengenalan Web
Artikel Terhangat
Membuat Web Golang 14 HTML Template Cache
09 Sep 2023
Membuat Web Golang 13 HTML Template Function
09 Sep 2023
Membuat Web Golang 12 HTML Template Layout
09 Sep 2023
Membuat Web Golang 11 HTML Template Action
09 Sep 2023
Membuat Web Golang 10 HTML Template Data
09 Sep 2023
Membuat Web Golang 9 Mengenal HTML Template
09 Sep 2023
Membuat Web Golang 08 Memahami File Server
08 Aug 2023
Membuat Web Golang 07 Memahami Cookie
08 Aug 2023

Membuat Web Golang 14 HTML Template Cache

Membuat Web Golang 13 HTML Template Function

Membuat Web Golang 12 HTML Template Layout

Membuat Web Golang 11 HTML Template Action

Membuat Web Golang 10 HTML Template Data

Membuat Web Golang 9 Mengenal HTML Template

Membuat Web Golang 08 Memahami File Server
