web-dev-qa-db-ja.com

Android Studio 1.1?で簡単なJUnit4テストを実行する方法

Android「Hello World」を表示するプロジェクトがあります。これはAndroid Studio。の[Blank Activity]テンプレートから作成されました。

次に、アプリケーションパッケージ(アクティビティがある同じパッケージ)に新しいJavaクラスを追加/作成します。これをShapeと呼び、単純なコンストラクタを追加します

public class Shape {
    public Shape(int i){
        if (i==0){
            throw new IllegalArgumentException("Cant have 0");
        }
    }
}

すごい。これでAndroidにまったく触れないクラスができたので、単体テストを行います。次に何をすればよいですか?

これは私の質問が停止する場所です。以下で私が試したことを説明します。

私は以前にAndroidまたはJavaでテストしたことがないことに注意してください。「ルーキー」の間違いについてはすみません。

  1. Shape.Javaで「ナビゲート」>「テスト」に移動します
  2. Enterキーを押して[新しいテストの作成]を選択します
  3. このポップアップを取得し、JUNIT4を選択します。

enter image description here

  1. 次に、修正ボタンを押して、見つからないライブラリを修正します
  2. このポップアップが表示されます

enter image description here

  1. 何を選択すればよいかわからないので、デフォルト/強調表示を選択します。
  2. テストを書く

    package com.eghdk.getjunit4towork;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class ShapeTest {
        @Test(expected = IllegalArgumentException.class)
        public void testShapeWithInvalidArg() {
            new Shape(0);
        }
    }
    
  3. この時点では、テストの実行方法がよくわかりませんが、これを実行してみてください。 enter image description here

  4. 実行時にこれらのエラーが発生します

    エラー:(3、17)Gradle:エラー:パッケージorg.junitは存在しません
    エラー:(5、24)Gradle:エラー:パッケージorg.junitは存在しません
    エラー:(8、6)Gradle:エラー:シンボルクラステストが見つかりません

22
EGHDK

Android Studio 1.1であるため、(実験的) 単体テストのサポート があります。そのページからの引用符:

Androidモジュールのbuild.gradleファイルでテストの依存関係を指定する必要があります。例:

dependencies {
  testCompile 'junit:junit:4.12'
  testCompile "org.mockito:mockito-core:1.9.5"
}

ASで単体テストのサポートを使用するには、次の手順を実行する必要があります。

  1. Build.gradleを更新してAndroid gradleプラグインバージョン1.1.0-rc1以降(build.gradleファイルまたはファイル>プロジェクト構造のUIで手動で)

  2. App/build.gradleに必要なテスト依存関係を追加します(上記を参照)。

  3. [設定]> [Gradle]> [実験的]で単体テスト機能を有効にします。

  4. プロジェクトを同期します。

  5. 「ビルドバリアント」ツールウィンドウ(左側)を開き、テスト成果物を「ユニットテスト」に変更します。

  6. テストソースコードのディレクトリ、つまりsrc/test/Javaを作成します。これは、コマンドラインから、またはプロジェクトツールウィンドウのプロジェクトビューを使用して実行できます。この時点で、新しいディレクトリが緑色で強調表示されます。注:テストソースディレクトリの名前は、慣習に基づいてgradleプラグインによって決定されます。

  7. テストを作成します。これを行うには、クラスを開き、その名前を右クリックして[移動]> [テスト]を選択します。いくつかのテストケースを追加します。
  8. 新しいテストクラスまたはメソッドを右クリックして、[実行...]を選択します。
  9. (オプション)Gradleを直接使用して、コンパイル時間を短縮できます。これを行うには、[実行]メニューに移動し、[構成の編集]を選択します。そこで、デフォルトのJUnitテンプレートを見つけ、「Make」起動前ステップを削除し、代わりに「Gradle対応make」ステップを追加します(タスク名は空のままにします)。

androidTestとプレーンtestの2つのテストタイプがあることを知っておくことが重要です。

  • androidTestは、主に、インストルメンテーションテストなど、エミュレータまたはデバイスで実行するテスト用です。コマンドラインから、./gradlew connectedCheckを使用してこれらを実行します。
  • testは、作成した単体テストなど、デバイスで実行したくないテスト用です。これらのテストを実行するには、./gradlew testを実行します。

引用で述べたように、テスト成果物を変更することにより、Android StudioでandroidTesttestを切り替えます。

当然、デバイスまたはエミュレーターでテストを実行しないことをお勧めします。テストプロセスを高速化するためですa lot。新しい実験的な単体テストのサポートにより、デバイスを使用せずにスタブ化されたAndroid APIにアクセスできます。これにより、androidTestからtestにさらにテストを移動できます。

34
nhaarman

Android studio 1.2以上の場合、この回答はGoogleでの最初のランキングの1つであり、これはAndroid Studioでユニットテストを設定する方法に関する優れた非常に簡単なチュートリアルです。これはリンクです: https://io2015codelabs.appspot.com/codelabs/Android-studio-testing#1

テストを実行しようとして2時間を無駄にした後、上記のリンクを使用して最終的にそれを行いました。

4
CommonSenseCode

最近ではAndroid Studio(現在のバージョン1.4)は回避策なしで完全な単体テストをサポートしています。自動生成されたExampleUnitTestで提案されているとおりです:

To work on unit tests, switch the Test Artifact in the Build Variants view.

screen shot

3
Andrey

設定に移動し、ツールを構築してから段階的に実行し、実験的です。実験的なチェック解除で、すべてのテスト成果物を有効にします。それはゲームオーバーです

0
Yash