cool_wiki

go언어 테이블 기반 테스트 작성하기 본문

Development/Triks

go언어 테이블 기반 테스트 작성하기

0cool 2018. 12. 15. 15:07
// fib.go

package
fib // FibNth returns nth (from 0th) Fibonaccci sequence number. func FibNth(n int) int { p, q := 0, 1 for i := 0; i < n; i++ { p, q = q, p+q } return p }

// fib_test.go


package fib import "testing" func TestFib(t *testing.T) { cases := []struct { in int want int }{ {0, 0}, {5, 3}, {6, 8}, } for _, c := range cases { got := FibNth(c.in) if got != c.want { t.Errorf("Fib(%d) == %d, want %d", c.in, got, c.want) } } }


이번에 새로 알게된 go언어의 테스팅 기법이다.


 이전에는 test용 함수를 따로 작성하고 준비된 인풋값을 하드코딩하면서 테스팅 하였는데, 보다 효율적이고 편리한 방법을 찾게되어 포스팅 해 보려고 한다.


위에 보이는 코드와 같이 'struct' 형식으로 미리 인풋/아웃풋을 할당하여 주고, for 문에서 하나씩 조회하면서 테스트를 수행해 주는 방식이다.


'go test'라는 go언어 기본 테스트 도구를 활용하여 진행되는데, 테스트 진행에 앞서 꼭 지켜줘야 할 규칙이 있다.


1. 테스트용 코드는 반드시 xx_test.go 와 같은 형식으로 지정해 주어야 한다.

- 그래야 go test모듈이 찾아서 tast case 수행이 가능하다.


2. 테스트 하고자 하는 함수는 반드시 TestXxx와 같은 규칙으로 네이밍 해야 한다.

- TestFib(o), Testfib(X)


3. 테스트용 함수를 작성할 때, 반드시 "t *testing.T"를 첫번째 매개변수로 주어야 한다.

- 이외의 추가적인 매개변수를 줄 필요는 없다.



 위와같은 규칙에 맞춰 테스트 함수를 작성하고, test 모듈을 활용해 테스트를 진행할 때 에는, 테스트용 코드가 위치한 디렉터리에서 "go test -v" 코멘드를 입력하여 테스트를 진행한다.


그러면 테스트용 모듈이 인풋과 아웃팟값에 맞춰 에러가 발생하는지 발생하지 않는지 조회하고, 테스트 결과를 알려준다.


부가적으로 수행시간에 대한 테스트도 같이 진행되니 여러모로 요긴하게 사용가능한 테스티 방식이 아닌가 싶다.


 위 코드를 기반으로 테스트를 진행해 보고싶으신 분들은 적당한 디렉터리에 두 파일을 위치시키고 두 파일이 위치하는 디렉터리에서 쉘창을 열고 "go -test v"를 수행하면 된다. (참고로 일부로 exception이 발생하게 하기위해 {5, 3}은 일부러 에러가 발생하게끔 만들었다.)





'Development > Triks' 카테고리의 다른 글

웹 크롤러 제작기 00  (0) 2019.03.04
Comments