Go web 2. test 환경

JINSOO PARK·2021년 10월 22일
0

Go 로 만드는 웹

목록 보기
2/16

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)
}
profile
개린이

0개의 댓글