test 코드 만들기
go에서는 파일명에 _test.go를 하면 테스트 코드로 작동한다.
패키지 설치
go get github.com/smartystreets/goconvey
패키지 실행
goconvey
localhost:8080 으로 접속해서 확인
goconvey가 계속 돌면서 상시 오류확인

패기지 설치
go get github.com/stretchr/testify/assert
ex) _test.go
package myapp
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestIndesPathHandler(t *testing.T) {
assert := assert.New(t)
// 패키지 사용
res := httptest.NewRecorder() // 테스트용 레코더
req := httptest.NewRequest("GET", "/", nil)
// 메소드, 타겟 ,바디
IndexHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
// res.Code가 OK인지 아닌지 비교
}
ex)body 비교하기
package myapp
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestIndexPathHandler(t *testing.T) {
assert := assert.New(t)
// 패키지 사용
res := httptest.NewRecorder() // 테스트용 레코더
req := httptest.NewRequest("GET", "/", nil)
// 메소드, 타겟 ,바디
IndexHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
// res.Code가 OK인지 아닌지 비교
data, _ := ioutil.ReadAll(res.Body)
//res.Body의 값은 버퍼값이기 때문에
// ioutil.ReadAll 패키지를 사용해서 버퍼값을읽어온다
// err는 _ 무시
assert.Equal("Hello World", string(data))
//"Hello World"와 비교
// 바이트 어레이 타입을 string으로
}
ex) /bar 비교하기
package myapp
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBarPathHandler_WithoutName(t *testing.T) {
assert := assert.New(t)
// 패키지 사용
res := httptest.NewRecorder() // 테스트용 레코더
req := httptest.NewRequest("GET", "/bar", nil)
// 메소드, 타겟 ,바디
barHandler(res, req)
assert.Equal(http.StatusOK, res.Code)
// res.Code가 OK인지 아닌지 비교
data, _ := ioutil.ReadAll(res.Body)
//res.Body의 값은 버퍼값이기 때문에
// ioutil.ReadAll 패키지를 사용해서 버퍼값을읽어온다
// err는 _ 무시
assert.Equal("Hello World", string(data))
//"Hello World"와 비교
// 바이트 어레이 타입을 string으로
}

입력값이 달라서 fail이 난다.
"Hello World" -> "Hello World!"

ex) json비교
func TestFooHandler_WithJson(t *testing.T) {
assert := assert.New(t)
res := httptest.NewRecorder()
req := httptest.NewRequest("POST", "/foo",
strings.NewReader(`{"first_name":"Jinsoo", "last_name":"Park", "email":"jinzza456@gmail.com"}`))
//json포맷을 넣으면 strings.NewReader ioreader로 바뀜
mux := NewHttpHandler()
mux.ServeHTTP(res, req)
assert.Equal(http.StatusCreated, res.Code)
}