【JUnit】ローカルでテスト成功するのにGitLabCIでは失敗する時の調べ方


結論

  1. GitLab CIで実行したテストのレポートを表示する
  2. レポートを元に原因突き止めて修正する!

前提

GitLabのfeatureブランチへpushすると、テストで失敗していてbuildできない。
ローカルでは全てテスト成功しているのに、、

環境

  • Mac
  • GitLab 14.10.0
  • Java 11
  • JUnit 5.8.1
  • ビルドツール Gradle

テスト失敗時の詳細

  • ローカル
    • プロジェクト/build/reports/tests/test/index.html で詳細が見れる
  • リモート(GitLabCI)
    •  どこで見るの??

GitLab上でテストレポートを確認したい

1 ) .gitlab-ci.yml に追記

.gitlab-ci.yml(一部抜粋)

gradle_test:
  stage: test
  script:
    - gradle test
  artifacts:
    paths:
      - build
    when: always
    reports:
      junit: build/test-results/test/**/TEST-*.xml

(上記は、javaビルドツールがGradleの場合。Mavenの場合は異なる。)
(GitLab Runner13.0以降では、*が使える)

  • artifacts: paths:
    • Jobが終了した後に作成されるファイルやディレクトリの一覧のパスを指定(リポジトリのルートからの相対パス)
    • 上記の場合、リポジトリ直下のbuildディレクトリを指定している

2 ) GitLab画面での詳細確認手順

  • GitLab画面 CI/CD / Pipelines メニュー / Testsタブで、失敗したJob名をクリック

  • 失敗したテストの詳細をクリック

    • ローカルテストと同じような詳細が確認できます

さいごに

詳細を見て、原因判明。
原因:日付フォーマット変換と単体テストを追加してみたが、ローカルとリモートのTimeZoneが異なっていた。
確かに、ローカルでは通ったテストが、リモートでは通らないわけですね、、

SimpleDateFormatクラスで日付フォーマットの変換等をしているので、
TimeZoneを合わせる必要があるってこと(きっと常識の常識なんだろうな)勉強になりました。

失敗原因の調べ方さえ分かれば、どうにかなるかなと。今後のためのメモでした。

参考
GitLabドキュメント/UnitTestReport
Reporting test results in GitLab