LoginSignup
1
1

More than 5 years have passed since last update.

GuardでAndroidのUnitTestを自動実行する

Last updated at Posted at 2018-01-08

目的

Androidプロジェクトで、UnitTestを書いているものの実行は手動でしているため、
うっかり忘れてPushしてCIからの失敗通知で修正するパターンがよくある。
そのため、UnitTestを自動で実行してくれるようにした

Guardとは

ファイルやディレクトリの変更を検知して、任意のタスクを実行させることができるRubyのライブラリ

今回はGradleのタスクを実行できるguard-graldeを使う

導入手順

ほとんどguard-gradleのreadmeと同じ手順
※RubyとBundlerが導入されている前提
※導入していない場合はreadmeにあるinstaller.shを実行する方法で4.まで飛ばせるかもしれない(未検証)

プロジェクト構成
 ├ .gralde/
 ├ .idea/
 ├ app/
 ├ build.gradle
 ├ Gemfile # 今回追加ファイル
 ├ Guardfile # 今回追加ファイル
 └ local.properties

  1. プロジェクト直下にGemfileを作成して、記述する

    Gemfile
    source 'https://rubygems.org'
    gem 'guard-gradle'
    
  2. Guardのインストールを実行する

    bundle install
    
  3. Guardfileを生成するコマンドを実行する

    bundle exec guard init gradle
    
  4. Guardfileの記述を変更する

    • 対象ファイルのディレクトリにappと追加するだけ
    Guardfile(変更前)
    guard :gradle do
      watch(%r{^src/main/(.+)\.*$}) { |m| m[1].split('.')[0].split('/')[-1] }
      watch(%r{^src/test/(.+)\.*$}) { |m| m[1].split('.')[0].split('/')[-1] }
      watch('build.gradle')
    end
    
    Guardfile(変更後)
    guard :gradle do
      watch(%r{^app/src/main/(.+)\.*$}) { |m| m[1].split('.')[0].split('/')[-1] }
      watch(%r{^app/src/test/(.+)\.*$}) { |m| m[1].split('.')[0].split('/')[-1] }
      watch('build.gradle')
    end
    
  5. Guardを実行する

    bundle exec guard
    
  6. ソースコードを変更すると、自動で./gradlew testが走る

Gradleのコマンドを変えたい時

デフォルトでは./gradlew testが走る。
特定のfloverやbuildTypeのみ実行したい場合等、カスタム設定をしたい場合はGuardfileを変更する

Guardfile(./gradlew testを実行)
guard :gradle do
...
Guardfile(./gradlew testDebugUnitTest --offlineを実行)
guard :gradle, task: 'testDebugUnitTest', flags: '--offline' do
...

デスクトップ通知をしたい場合

ここにGuardがサポートしている通知ライブラリが書かれているので、よしなに追加する
自分はTerminal Notifierを導入していたので、Gemfileに以下の記述を追加した

Gemfile
gem 'terminal-notifier-guard' 
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1