본문 바로가기
프로그래밍/GO

godoc 설치 및 사용법 / go 테스트 및 커버리지 확인

by 남생 namsaeng 2022. 5. 30.
반응형

리팩터링이 필요한 코드 리뷰 및 테스트 가능한 코드 작성을 위하여 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%에 가깝게 해야 된다.

반응형

댓글