Yoshi.dev

技術系の趣味、またはやった仕事やそこから学んだことを忘れないために

CircleCIで既存Java(8)プロジェクトに自動テストの仕組みを作った

circleCI使って自動テストの仕組みを作った

サービス規模の拡大とともに障害発生率が上がってきていて、不安定な運用になっていた。
それを少しでも食い止めるためにテストを入れることにした。
またテストがあることで新しく来た人のコード理解の助けになることも期待している。
何よりちゃんと自分自身テストドリブンな開発方法を身に着けたかった。

gitにブランチプッシュ→テスト実行
pull requestはテストが通ったもののみというルールにした

circle.ymlはこんな感じ。至ってシンプル

machine:
  java:
    version: oraclejdk8

test:
  override:
    - ./gradlew test
  post:
    - mkdir -p $CIRCLE_TEST_REPORTS/junit/
    - find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;

gradle wrapperで予めgradlewスクリプトを作成しておく。こうした方がcircleCIで動かす時gradleのバージョンとか気にしなくていいかなと思ったので。

gradlew testを実行
幾つかコケるけどreportはちゃんと出力されるのを確認
メンテされてなくて錆びついてるコードが多そうなので、一旦コケてるやつは片っ端からコメントアウトした。
自動テストの仕組みを作ってからテストコードは直していく。

ちなみにcircle.ymlでpostしている部分では、テストの結果をcircleCIに送っている。こうすることでテスト結果をcircleCIで見ることが出来た。
JUnitは結果のxmlファイル吐いてくれるから特に難しいことはしてない。

Pull Requestを対象にしたかったので、CircleCIの設定で
Only build pull requests
をONにした。


テストを後からしかも実装者じゃない人が書くのはなかなか辛いから最初からやるべき!