lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

アプリのテスト

Android Studio はテストがシンプルになるように設計されています。 ローカル JVM で実行される JUnit テストや端末で実行されるインストルメント化されたテストをわずか数クリックでセットアップすることができます。

ローカル ユニット テストで Android API の呼び出しをテストするための Mockito、インストルメント化されたテストでユーザー インタラクションを行うための EspressoUI Automator などのテスト フレームワークを統合することにより、テスト機能を拡張することもできます。

Espresso Test Recorder を使用すると、Espresso テストを自動的に生成することができます。

このページでは、アプリに新しいテストを追加して、Android Studio から実行する方法に関する基本的な情報を提供します。

テストの作成方法に関する詳細なガイドは、テストの概要をご覧ください。

テストのタイプと場所

テストコードの場所は、作成するテストのタイプによって異なります。 Android Studio では、次の 2 つのタイプのテストのために、ソースコード ディレクトリ(ソースセット)を提供しています。

ローカル ユニット テスト

module-name/src/test/java/ にあります。

これらのテストは、マシンのローカル Java 仮想マシン(JVM)上で実行されます。 テストに Android フレームワークの依存関係がない場合、または Android フレームワークの依存関係をモックで代用できる場合は、これらのテストを使用して実行時間を最小限に抑えることができます。

実行時に、これらのテストは、すべての final 修飾子が削除されている修正版の android.jar に対して実施されます。 そのため、Mockito などの一般的なモック ライブラリを使用できます。

インストルメント化されたテスト

module-name/src/androidTest/java/ にあります。

これらのテストは、ハードウェア端末またはエミュレータで実行されます。 これらのテストは Instrumentation API にアクセスして、テストしているアプリの Context などの情報へのアクセスを可能にし、テストコードからテスト中のアプリを制御できるようにします。 ユーザー インタラクションを自動化するための統合および機能 UI のテストを作成する場合、またはモック オブジェクトでは代用できない Android 依存関係がテストにある場合は、これらのテストを使用します。

インストルメント化されたテストは(アプリの APK とは別の)APKに組み込まれるため、テスト用の AndroidManifest.xml ファイルが含まれている必要があります。 ただし、Gradle はビルド時にこのファイルを自動的に生成するため、このファイルはプロジェクトのソースセットに表示されません。 `minSdkVersion` の別の値を指定したり、テスト用の実行リスナーを登録したりするために、必要に応じて、独自のマニフェスト ファイルを追加することができます。 アプリをビルドするときに、Gradle は複数のマニフェスト ファイルを 1 つのマニフェストに統合します。

Gradle のビルドは、プロジェクトのアプリ ソースセットの場合と同じように、これらのテスト ソースセットを解釈します。そのため、ビルド バリアントに基づいてテストを作成することができます。

新しいプロジェクトを作成すると、またはアプリのモジュールを追加すると、Android Studio は、上記のテスト ソースセットを作成し、各ソースセットにサンプル テストファイルを含めます。

図 1 に示されているように、これらのテスト ソースセットは [Project] ウィンドウに表示されます。

図 1. プロジェクトの(1)インストルメント化されたテストと(2)ローカル JVM テストは、[Project] ビュー(左)または [Android] ビュー(右)に表示されます。

新しいテストの追加

ローカル ユニット テストまたはインストルメント化されたテストを作成する場合、次の手順を実行して、特定のクラスまたはメッソッド用の新しいテストを作成することができます。

  1. テストするコードが含まれている Java ファイルを開きます。
  2. テストするクラスまたはメソッドをクリックしてから、Ctrl+Shift+T(⇧⌘T)を押します。
  3. 表示されたメニューで、[Create New Test] をクリックします。
  4. [Create Test] ダイアログで、フィールドを編集し、生成するメソッドを選択してから、[OK] をクリックします。

  5. [Choose Destination Directory] ダイアログで、作成するテストのタイプに対応するソースセットをクリックします。つまり、インストルメント化されたテストの場合は [androidTest] を、ローカル ユニット テストの場合は [test] をクリックします。

    [OK] をクリックします。

または、次の手順を実行して、適切なテスト ソースセットに汎用 Java ファイルを作成できます。

  1. 左側の [Project] ウィンドウで、プルダウン メニューをクリックして、[Project] ビューを選択します。

  2. 適切なモジュール フォルダとネストされた [src] フォルダを展開します。 ローカル ユニット テストを追加するには、[test] フォルダとネストされた [java] フォルダを展開します。インストルメント化されたテストを追加するには、[androidTest] フォルダとネストされた [java] フォルダを展開します。

  3. Java パッケージ ディレクトリを右クリックして、[New] > [Java Class] を選択します。

  4. ファイルに名前を付けてから、[OK] をクリックします。

また、アプリ モジュールの build.gradle ファイルでテスト ライブラリの依存関係を指定する必要があります。

dependencies {
    // Required for local unit tests (JUnit 4 framework)
    testCompile 'junit:junit:4.12'

    // Required for instrumented tests
    androidTestCompile 'com.android.support:support-annotations:24.0.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
}

オプションのその他のライブラリ依存関係と、テストを作成する方法の詳細については、ローカル ユニット テストのビルドインストルメント化されたテストのビルドをご覧ください。

ビルド バリアント用のインストルメント化されたテストの作成

一意のソースセットを備えたビルド バリアントがプロジェクトに含まれる場合は、対応するインストルメント化されたテストのソースセットが必要です。

ビルド バリアントに対応するインストルメント化されたテストのソースセットを作成すると、テストコードを整理された状態に保ち、特定のビルド バリアントのみに適用されるテストを実行することができます。

ビルド バリアントのテスト ソースセットを追加するには、次の手順を実行します。

  1. 左側の [Project] ウィンドウで、プルダウン メニューをクリックして、[Project] ビューを選択します。

  2. 適切なモジュール フォルダ内で、[src] フォルダを右クリックして、[New] > [Directory] をクリックします。

  3. ディレクトリ名として "androidTestVariantName" と入力します。たとえば、"MyFlavor" というビルド バリアントがある場合、ディレクトリ名は "androidTestMyFlavor" にする必要があります。

[OK] をクリックします。 1. 新しいディレクトリを右クリックして、[New] > [Directory] をクリックします。 1. ディレクトリ名として "java" と入力して、[OK] をクリックします。

上記の手順で新しいテストを追加すると、この新しいソースセットにテストを追加することができます。 [Choose Destination Directory] ダイアログが表示されたら、バリアントの新しいテスト ソースセットを選択します。

src/androidTest/ ソースセットのインストルメント化されたテストは、すべてのビルド バリアントによって共有されます。 アプリの "MyFlavor" バリアントのテスト APK をビルドすると、Gradle は src/androidTest/src/androidTestMyFlavor/ の両方のソースセットを組み合わせます。

たとえば、次の表は、アプリのコードのソースセットに対応するソースセット内にインストルメンテーション テスト ファイルを配置する方法を示しています。

アプリクラスへのパス 一致するインストルメンテーション テスト クラスへのパス
src/main/java/Foo.java src/androidTest/java/AndroidFooTest.java
src/myFlavor/java/Foo.java src/androidTestMyFlavor/java/AndroidFooTest.java

アプリ ソースセットの場合と同じように、Gradle のビルドは、異なるテスト ソースセットのファイルを統合およびオーバーライドします。 この場合、"androidTestMyFlavor" ソースセットの AndroidFooTest.java ファイルにより、"androidTest" ソースセットのバージョンがオーバーライドされます。

ソースセットが統合される方法の詳細については、ビルドの設定をご覧ください。

アプリとテスト ソースセットに対してビルド バリアントを使用すべきもう 1 つの理由は、モック依存関係を利用して閉じられた環境でのテストを作成するためです。 つまり、依存関係のフェイク実装(通常は不安定なネットワーク リクエストや端末センサーデータ)が含まれるアプリのプロダクト フレーバーを作成してから、対応するモックテスト ソースセットを追加することができます。

詳細については、閉じた環境でテストを行うためにプロダクト フレーバーを活用することに関するブログ投稿をご覧ください。

テストの実行

テストを実行するには、次の手順を実行します。

  1. ツールバーの [**Sync Project **] をクリックして、プロジェクトと Gradle を同期する必要があります。

  2. 次のいずれかの方法でテストを実行します。

    • [Project] ウィンドウで、テストを右クリックして、[Run] をクリックします。

    • コードエディタで、テストファイルのクラスまたはメソッドを右クリックして、[Run] をクリックし、クラスのすべてのメソッドをテストします。

    • すべてのテストを実行するには、テスト ディレクトリを右クリックして、[Run tests] をクリックします。

デフォルトでは、テストは、Android Studio のデフォルトの実行構成を使用して実行されます。 インストルメンテーション ランナーやデプロイのオプションなど、いくつかの実行構成を変更する場合は、([Run] > [Edit Configurations] をクリックして)[Run/Debug Configurations] ダイアログで実行構成を編集することができます。

テストするビルドタイプの変更

デフォルトでは、すべてのテストは、デバッグ ビルドタイプに対して実行されます。 モジュール レベルの build.gradle ファイルの testBuildType プロパティを使用して、対象を別のビルドタイプに変更することができます。

たとえば、"staging" ビルドタイプに対してテストを実行する場合は、次のスニペットのようにファイルを編集します。

android {
    ...
    testBuildType "staging"
}