반응형
리팩터링이 필요한 코드 리뷰 및 테스트 가능한 코드 작성을 위하여 godoc을 설치한다.
1. Visual Studio Code 터미널에서 아래와 같은 환경변수를 설정한다.
[namsaenga@localhost ~]$ export GOPATH="/home/namsaenga/go"
[namsaenga@localhost ~]$ export PATH="$GOPATH/bin:$PATH"
[namsaenga@localhost ~]$ . ~/.bashrc
2. golang 홈페이지에 접속 및 godoc 이동, 그리고 godoc 경로를 복사한다.
- golang.org/x/tools/cmd/godoc
3. Visual Studio Code 터미널에서 godoc 경로를 이용하여 godoc을 설치한다.
[namsaenga@localhost ~]$ go get golang.org/x/tools/cmd/godoc
go: downloading golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f
go: downloading golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3
4. godoc 실행
- go.mod가 있는 패키지로 이동한 다음에 아래의 명령어를 실행한다.
[namsaenga@localhost namcoin]$ godoc -http=:6060
using module mode; GOMOD=/home/namsaenga/namcoin/namcoin/go.mod
5. 웹페이지에서 godoc 보기
- http://localhost:6060/pkg/ 접속
- Third party 카테고리로 이동하면 우리가 만든 패키지의 사용자 정의 함수 및 오픈소스로 사용한 패키지 함수들의 자세한 사항을 볼 수 있다.
- 우리가 작성한 함수들을 문서화할 때에도 godoc을 사용한다.
6. 문서화 방법
- 1) 시놉시스 추가 방법 : 패키지명 위에 주석으로 내용을 작성한다.
- 2) 함수설명 추가 방법 : 함수명 위에 주석으로 내용을 작성한다.
<utils.go>
// Package utility contains function to be used across the application
package utility
import(
"fmt"
"log"
"strings"
)
// FromBytes takes an interface and data and then will encode the data the interface
func FromBytes(i interface{}, data []byte) {
encoder := gob.NewDecoder(bytes.NewReader(data))
HandleErr(encoder.Decode(i))
}
7. 테스트 방법
1) 같은 패키지 아래에 XX_test.go 파일을 만든다.
- 예시: utils.go를 테스트하기 위해 utils_test.go 파일을 만든다.
2) test 함수를 만든다.
- 모든 function은 *testing.T를 인수로 받는다.
- 예시: func TestHash(t *testing.T) { ... }, 여기에서 t로 서브 테스트를 만들 수 있거나 테스트 내용을 console에 출력할 수 있다.
- 서브 테스트는 테스트할 항목이 여러 개일 경우에는 t.Run("레이블명", func(t *testing.T) {...})을 사용하여 작성한다.
func TestHash(t *testing.T) {
hash := "e005c1d727f7776a57a661d61a182816d8953c0432780beeae35e337830b1746"
s := struct{ Test string }{Test: "test"}
t.Run("Hash is always same", func(t *testing.T) {
x := Hash(s)
if x != hash {
t.Errorf("Expected %s, got %s", hash, x)
}
})
t.Run("Hash is hex encoded", func(t *testing.T) {
x := Hash(s)
_, err := hex.DecodeString(x)
if err != nil {
t.Error("Hash should be hex encoded")
}
})
}
3) 터미널에서 go test ./... -v 을 실행한다.
- 이때 Test가 작성된 파일만 실행된다.
4) Example 함수를 만들어 예시 코드를 작성할 수도 있다.
- 예시 : func ExampleFromBytes() {...}을 만들고 안에 주석을 이용하여 Output을 작성한다( // Output: "hello world!").
- 문서에서는 Code 부분과 Output 부분으로 출력되며 Output에는 "hello world!"로 나타난다.
8. Coverage 확인
- 파일로 남기는 명령어
[namsaenga@localhost namcoin]$ go test -v -coverprofile cover.out ./...
- 파일을 가시적으로 보여주는 명령어(윈도우에서는 go test cover -html cover.out 사용)
[namsaenga@localhost namcoin]$ go tool cover -html=cover.out
- 두 명령어를 차례대로 실행
[namsaenga@localhost namcoin]$ go test -v -coverprofile cover.out ./... && go tool cover -html=cover.out
빨간색 코드는 테스트가 적용되지 않은 것을 나타내며, 녹색 코드는 테스트 적용이 된 것을 나타낸다. 이는 테스트 작성이 전체 몇 퍼센트 차지하는지 알려주는 것으로 100%에 가깝게 해야 된다.
반응형
'프로그래밍 > GO' 카테고리의 다른 글
[golang] 조건문 있는 함수를 조건문에서 호출하는 유닛 테스트 (0) | 2022.06.13 |
---|---|
[golang] 조건문 및 루프가 있는 함수 유닛 테스트, nested function (0) | 2022.06.09 |
[golang] Adapter Pattern 기반 Unit Test(2) (0) | 2022.06.08 |
[golang] Adapter Pattern 기반 Unit Test(1) (0) | 2022.06.08 |
[golang] Unit Test 및 Interfaces 기반 테스트 (0) | 2022.06.02 |
댓글