본문으로 건너뛰기

Go Ginkgo로 테스트 작성하기

References

설치

go get github.com/onsi/ginkgo/v2
go get github.com/onsi/gomega
mise use ginkgo@2

Bootstrapping

테스트를 수행할 디렉토리로 이동하여 부트스트랩을 위한 코드를 추가합니다.

xxx_suite_test.go
package xxx_test

import (
"testing"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

func TestXxx(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Xxxx Suite")
}

var _ = BeforeSuite(func() {
// setup code
})

var _ = AfterSuite(func() {
// teardown code
})

테스트 설명하기

var _ = Describe("...", func () {
Context("...", func () {
When("...", func () {
It("...", func () {
By("...")

// test code
})

It("...", func () {
By("...")

// test code
})
})
})
})

테스트 코드를 작성할 때, container node (Describe, Context, When), setup node (It), subject node (By)와 text 인자를 활용하여 테스트의 구조를 명확히 할 수 있습니다. 잘 구조화된 테스트는 개발자의 이해를 도와 유지보수를 쉽게하며, 테스트 실패 시 문제를 빠르게 파악할 수 있게 합니다.

ContextDescribe의 alias이고, WhenDescribe와 같지만 when 을 text 앞에 붙여준다는 점이 다릅니다.

테스트가 실패한 경우 아래와 같은 메시지가 출력됩니다.

[FAILED] [<duration>]
<describe>[ <describe>] [It] <it>
# ...
STEP: <by> @ <time>
STEP: <by> @ <time>
# error message

테스트 작성하기

반복되는 테스트 설정 분리하기

BeforeEachAfterEach는 소속된 container node 내의 모든 subject node가 실행되기 전/후에 실행됩니다.

var _ Describe("...", func () {
var sharedVar Type

BeforeEach(func () {
// setup code for sharedVar
})

AfterEach(func () {
// teardown code for sharedVar
})

It("...", func () {
// test code using sharedVar
})

It("...", func () {
// test code using sharedVar
})
})

위 코드는 BeforeEach -> It -> AfterEach 순으로 실행됩니다.

var _ = Describe("...", func () {
var sharedVar sharedType

BeforeEach(func () {
// setup code for sharedVar
})

AfterEach(func () {
// teardown code for sharedVar
})

Context("...", func () {
It("...", func () {
// test code using sharedVar
})

It("...", func () {
// test code using sharedVar
})
})

Context("...", func () {
BeforeEach(func () {
// additional setup code for this context
})

AfterEach(func () {
// additional teardown code for this context
})

It("...", func () {
// test code using sharedVar
})

It("...", func () {
// test code using sharedVar
})
})
})

위 코드의 두 번째 subject가 실행될 때는 BeforeEach -> Context의 BeforeEach -> It -> Context의 AfterEach -> AfterEach 순으로 실행됩니다.

BeforeEachIt 사이에 실행되는 JustBeforeEach라는 것도 있습니다. 마찬가지로 ItAfterEach 사이에 실행되는 JustAfterEach도 있습니다.

Table driven tests

실행 제어하기