From Tokyo, Japan. Web-Developer. Write some codes by Go/Scala And thanks everything around my self.

パッケージを細分化したGoのライブラリのテストをTravisCIで実行する

パッケージを細分化したGoのライブラリのテストをTravisCIで実行する

Goで記述したライブラリが、複数のパッケージを内包していたためTravisCIでのテストが上手く回らずにハマったのでメモしておく。

通常、ディレクトリ直下にすべてのソースコードが存在するような単機能のライブラリであれば、以下のような.travis.ymlでテストされる

language: go
go:
    - 1.9
go_import_path: github.com/deadcheat/hogehoge
before_install:
    - go get github.com/modocache/gover
    - go get github.com/mattn/goveralls
    - go get golang.org/x/tools/cmd/cover
script:
    - go test -coverprofile=hogehoge.coverprofile
    - $HOME/gopath/bin/gover
    - $HOME/gopath/bin/goveralls -coverprofile=gover.coverprofile -service=travis-ci

通常テストだけをする場合であれば、-coverprofileを取らずにテストだけ回すことも多いので意識していなかったが、複数パッケージが存在している場合には、このような記述だと次のようなエラーが発生してしまう。

> go test -covermode=count -coverprofile=test.coverprofile ./...

cannot use test profile flag with multiple packages

要するに複数のパッケージに対しては単一のcoverprofileファイルを作成できないというエラーなので、script部分を個別に実施するように追記する。

script:
  - go test -v -covermode=count -coverprofile=fuga.coverprofile github.com/deadcheat/hogehoge/fuga
  - go test -v -covermode=count -coverprofile=fugo.coverprofile github.com/deadcheat/hogehoge/fugo
  - go test -v -covermode=count -coverprofile=fuge.coverprofile github.com/deadcheat/hogehoge/fuge
  - $HOME/gopath/bin/gover
  - $HOME/gopath/bin/goveralls -coverprofile=gover.coverprofile -service=travis-ci

余談だが

他にトライした方のブログなどを参考にいろいろ試して余計わからなくなったりしたのだが、goverを使う場合、profile結果のファイルの拡張子は.coverprofile以外の拡張子にしてはいけない。

goverは.coverprofileで終わるファイルを収集しているため、カバレッジリポートに空のファイルが生成されてしまい、ログ上はカバレッジが出力されているにも関わらず、coverallsだけが動かないという結果になってしまう。

インターネット()をやめた / Quit THE INTERNET

インターネット()をやめた / Quit THE INTERNET

SolrのCollectionのリロードを定期実行するためのプログラムを無駄に書いた

SolrのCollectionのリロードを定期実行するためのプログラムを無駄に書いた