Go : 테스트 실행에서 환경 변수를 전달하는 방법 등

4320 단어 5testing

소개



Go 개발에 있어서 테스트는 프로그램(아티스트)의 품질을 보증한다는 관점에서 매우 중요합니다.
그러나 처음에는 여러가지 의문이나 익숙하지 않은 것으로 스트레스가 쌓이기도 합니다.
필자가 Go 테스트에서 망설여 버렸을 때에 조사한 일이나 그것을 통해서 얻은 쵸트한 지견 등을 공유하고 싶습니다.

환경 변수 전달 방법



테스트를 실행할 때 환경 변수가 필요한 경우 ↓와 같이 환경 변수로 전달할 수 있습니다.

하나의 환경 변수를 전달


ENV_VAR=develop go test -v -run Test_xxxxx
ENV_VAR는 환경 변수 이름입니다. develop 는 그 값입니다.

여러 환경 변수 전달



공백으로 구분하기만 하면 됩니다.
ENV_VAR1=develop API_URL=http://example.mock.com go test -v -run Test_xxxxx

환경 변수가 많을 때는 쉘 스크립트 등에 기술하는 것이 좋다고 생각합니다.

Test에서 이전 테스트 캐시를 사용하지 않음



별로 이용하는 장면은 없을지도 모르지만, 이런 일도 할 수 있다는 메모 정도.
go clean -testcache && go test 

use non-cacheable flags on your test run. The idiomatic way is to use -count=1
(캐시하지 않는 플래그로서, -count=1 를 붙여 테스트를 실행할 수도 있다)
go test -count=1 -v -run Testxxxxxx_Method

테스트 함수만 테스트하고 싶습니다.


  • 테스트 할 메소드가 설명 된 디렉토리로 이동합니다.
  • go test -v -run Test_xxxxxxxFunc 및 실행

  • # command-line-arguments 및 오류



    여러 테스트가 작성된 xxxx_test.go를 실행합니다.
    $ go test -v xxxx_test.go
    # command-line-arguments  [command-line-arguments.test]
    .\xxxx_test.go:10:7: undefined: xxxxx
    FAIL    command-line-arguments [build failed]
    

    실패합니다.

    원인


    go run , go test , go build 등을 실행할 때는 의존하는 모든 파일이 필요합니다.
    문서 에 설명이 있습니다.

    해결하려면



    다음과 같이 의존하는 모든 파일을 지정합니다.
    go test -v xxxx_test.go abc_service.go xxx_util.go xxx_errors.go
    

    go run에서도 같은 오류가 발생합니다.



    아래와 같은 파일 구성에서는

    디렉토리 구성
    .
    ├── main.go
    ├── service.go ← このファイルに関数が定義されています。
    └── service_test.go
    
    $ go run main.go
    

    그렇다면 같은 방식으로 오류가 발생합니다.
    $ go run main.go
    # command-line-arguments
    main.go:xx:10: undefined: ExecuteNiceMethod
    

    공식 문서: Compile and run Go program 에 해설이 있습니다.

    Run compiles and runs the named main Go package. Typically the package is specified as a list of .go source files from a single directory, ...

    일반적으로 패키지는 단일 디렉토리의 .go 소스 파일 목록으로 지정됩니다.

    그렇군요.

    모든 go 파일을 목록으로 지정하면 됩니다.
    같은 디렉토리에 main.go 이외에도 .go 파일이 존재할 때는 주의가 필요합니다.

    해결 방법



    즉, service.go 도 컴파일에는 필요하므로,
    $ go run main.go service.go
    

    하는 것으로 해결합니다.
    다만 같은 디렉토리에 그 밖에도 go 파일이 있으면 힘들기 때문에, 쉘 스크립트등으로 정리해 실행할 수 있도록 준비해 두는 것도 좋을지도 모릅니다. 필자는 ↓ 쉘 스크립트를 준비하고 있습니다.

    execute_all_go_file.sh
    # ディレクトリのテストファイル`*_test.go`を除く全ての`.go`ファイルを実行するようにしています。
    go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)
    

    마지막으로



    테스트는 스크립트 동작의 최소한의 동작 보증입니다. 부드럽게 테스트를 진행함으로써 쓸데없는 스트레스없이 심플하게 질 높은 프로그램의 완성을 목표로합니다.
    마음이 가면 수시로 갱신해 갈지도 모릅니다.
    똑같이 고민하고 계시는 분의 참고가되면 좋다고 생각 공유했습니다.

    좋은 웹페이지 즐겨찾기