Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

目的

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' 
eijenson
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away