기존에 작업한 "Web - Text, json, URL 쿼리 방식" 코드에 대한 테스트 코드입니다.
테스트 코드를 작성하기 전에 2개의 패키지를 설치해야 함.
설치 위치 - 본인의 프로젝트 폴더에서 실행.
설치방법
1. go get github.com/smartystreets/goconvey
2. 환경변수 path에 추가 ===> "%GOPATH%\bin"
3. go get github.com/stretchr/testify/assert
./myapp/app_test.go - 5가지의 테스트 경우를 점검함.
package myapp
import (
"encoding/json"
"github.com/stretchr/testify/assert"
"io/ioutil"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
// 루트폴더에 접근시, 정상상태 응답 및 응답 텍스트 비교
func TestIndexPathHandler(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/", nil)
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
// barHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
data, _ := ioutil.ReadAll(res.Body)
assert.Equal("Hello World", string(data))
}
// /bar 접근시, 정상상태 응답 및 응답 텍스트 비교
func TestBarPathHandler_WithoutName(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/bar", nil)
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
// barHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
data, _ := ioutil.ReadAll(res.Body)
assert.Equal("Hello name: World!", string(data))
}
// URL 쿼리정보로 /bar 접근시, 정상상태 응답 및 응답 텍스트 비교
func TestBarPathHandler_WithName(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/bar?name=kimbs", nil)
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
// barHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
data, _ := ioutil.ReadAll(res.Body)
assert.Equal("Hello name: kimbs!", string(data))
}
// /foo 접근시, 정상상태 응답
func TestFooPathHandler_WithoutJson(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/foo", nil)
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
assert.Equal(http.StatusBadRequest, res.Code)
}
// json데이터로 /foo 접근시, 정상상태 응답 및 응답 텍스트 비교
func TestFooPathHandler_WithJson(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("POST", "/foo",
strings.NewReader(`{"first_name":"bs","last_name":"kim","email":"kimbs@kimbs.com"}`))
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
assert.Equal(http.StatusCreated, res.Code)
user := new(User)
err := json.NewDecoder(res.Body).Decode(user)
assert.Nil(err)
assert.Equal("bs", user.FirstName)
assert.Equal("kim", user.LastName)
}
테스트 실행 방법
프로젝트 폴더에서 goconvey 실행, 실행되지 않으면 "%GOPATH%\bin" 폴더에 goconvey 파일이 있는지 확인.
없으면 다시 설치하고 있다면 path 등록을 못한 경우임.
프로젝트 폴더에서 goconvey 실행 > http://localhost:8080/ 접속해서 테스트 서버가 정상동작하는지 확인
'GO lang > web' 카테고리의 다른 글
[GO] Todo list - interface 구현1 (0) | 2021.11.18 |
---|---|
[GO] Todo list - refactoring(구조변경) (0) | 2021.11.17 |
[GO] Todo list - map 자료구조 (0) | 2021.11.17 |
[GO] Web - Restful API, TDD (0) | 2021.11.04 |
[GO] Web - Text, json, URL 쿼리 방식 (0) | 2021.11.04 |