Golang 테스트 프레임워크 GoConvey 라이브러리 알아보기

오늘은 Golang으로 BDD 스타일 테스트 프레임워크 GoConvey 라이브러리를 알아보려 합니다.

GoConvey 설치

우선 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으로 GoConvey 패키지를 설치합니다.

go get github.com/smartystreets/goconvey

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

예제

package test

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

import (
	"testing"

	"github.com/smartystreets/goconvey/convey"
)

testing과 convey를 가져옵니다.

func TestFunc(t *testing.T) {

	convey.Convey("starting value", t, func() {
		x := 0

		convey.Convey("incremented", func() {
			x++

			convey.Convey("ShouldEqual", func() {
				convey.So(x, convey.ShouldEqual, 1)
			})
		})
	})

테스트 함수를 만들고 값이 증가되었을 때 지정한 값과 같은지 검사할 수 있습니다.

	convey.Convey("Numeric comparison", t, func() {
		x := 1
		convey.So(x, convey.ShouldBeGreaterThan, 0)
		convey.So(x, convey.ShouldBeLessThan, 2)

지정한 값보다 크거나 작은지 검사할 수 있습니다.

		convey.So(x, convey.ShouldBeBetween, 0, 2)
		convey.So(x, convey.ShouldNotBeBetween, 5, 10)
	})

두 수 사이에 존재하는지 검사할 수 있습니다.

	convey.Convey("Container", t, func() {
		intArr := []int{1, 2, 3}
		intMap := map[int]int{1: 1, 2: 2, 3: 3}

		convey.So(intArr, convey.ShouldContain, 2)
		convey.So(intArr, convey.ShouldNotContain, 4)
		convey.So(intMap, convey.ShouldContainKey, 2)
		convey.So(intMap, convey.ShouldNotContainKey, 4)

슬라이스와 맵으로 수가 포함되는지 검사할 수 있습니다.

		convey.So(1, convey.ShouldBeIn, []int{1, 2, 3})
		convey.So(0, convey.ShouldNotBeIn, []int{1, 2, 3})

슬라이스에 포함된 수에서 존재하는지 검사할 수 있습니다.

		convey.So([]int{}, convey.ShouldBeEmpty)
		convey.So([]int{1}, convey.ShouldNotBeEmpty)
	})

비어있는지에 대한 여부를 검사할 수 있습니다.

	convey.Convey("String", t, func() {
		convey.So("helloworld", convey.ShouldStartWith, "h")
		convey.So("helloworld", convey.ShouldNotStartWith, "e")
		convey.So("helloworld", convey.ShouldEndWith, "world")
		convey.So("helloworld", convey.ShouldNotEndWith, "hello")

문자열의 시작과 끝에 어떤 문자가 있는지에 대하여 검사할 수 있습니다.

		convey.So("helloworld", convey.ShouldContainSubstring, "ow")
		convey.So("helloworld", convey.ShouldNotContainSubstring, "worldhello")
	})

단순하게 어떤 문자열이 포함되었는지 검사할 수 있습니다.

	convey.Convey("Typechecking", t, func() {
		convey.So(10, convey.ShouldHaveSameTypeAs, 0)
		convey.So(10, convey.ShouldNotHaveSameTypeAs, "10")
	})
}

검사하려는 값의 타입을 비교할 수 있습니다.

Written on October 20, 2019