Golang assert와 mock Testify 라이브러리 알아보기

오늘은 Golang으로 Assert와 Mock 그리고 Testing suite를 만들 수 있는 Testify 라이브러리를 알아보려 합니다.

Testify 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 Testify 패키지를 설치합니다.

go get github.com/stretchr/testify

홈의 go 폴더에 Testify 소스코드와 패키지 파일이 생성됩니다.

예제

package test

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언하지 않고 테스트를 위해 다른 이름을 적습니다.

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/mock"
	"github.com/stretchr/testify/suite"
)

testing과 testify의 assert, mock, suite를 가져옵니다.

func TestEqual(t *testing.T) {
	assert.Equal(t, 10, 10, "equal")
	assert.NotEqual(t, 1, 10, "not equal")
}

테스트 함수를 만들어서 값들이 같은지에 대하여 테스트할 수 있습니다.

type MockObj struct {
	mock.Mock
}

Mock 구조체를 만듭니다.

func (mock *MockObj) testFunc(number int) (bool, error) {
	args := mock.Called(number)
	return args.Bool(0), args.Error(1)
}

Mock 구조체로 메소드를 만듭니다.

func TestFunc(t *testing.T) {
	testObj := new(MockObj)
	testObj.On("testFunc", 1).Return(true, nil)
	testObj.AssertExpectations(t)
}

Mock 구조체로 메소드를 가지고 테스트할 수 있는 함수를 만듭니다.

type TestSuite struct {
	suite.Suite
	Variable int
}

Testing suite 구조체를 만듭니다.

func (suite *TestSuite) SetupTest() {
	suite.Variable = 1
}
func (suite *TestSuite) TestExample() {
	assert.Equal(suite.T(), 1, suite.Variable)
}

Variable을 1로 설정하고 테스트 함수에서 Equal로 값이 같은지 테스트합니다.

func TestExampleTestSuite(t *testing.T) {
	suite.Run(t, new(TestSuite))
}

suite.Run로 모든 Testing suite를 수행합니다.

Written on October 22, 2019