111

Intellij Idea に基づいた Android Studio をダウンロードしました。

どのようにテストを作成しますか?

テストモジュールを作成するオプションがあることに気付きましたが、これは何もしないようです.srcで新しいプロジェクトを作成するだけです

また、既存のクラスで単体テストを作成できるホットキー CTRL+AlT+T を押してみましたが、現在のプロジェクトに配置したいようです。もちろん、これはTDDでは役に立ちません

誰もここで経験がありますか?

4

12 に答える 12

58

この回答は、Android のテストを始めたばかりの人向けです。テストがどのように機能するかを理解するのに役立つ 2 つの簡単な例を示します。次の 10 分間の説明に従っていけば、自分のアプリにテストを追加するための準備がすべて整います。その簡単さに驚くと思います。私は確かにそうでした。

Android テストの概要

実行するテストには 2 つの異なるタイプがあります。

  • ローカル単体テスト。これらは、JVM (Java 仮想マシン) でローカルに実行されます。ローカルなので速いです。それらを使用して、Android API ではなく Java だけが必要なコードの部分をテストできます。(より多くのことをローカルでテストするために、偽の API オブジェクトを作成できる場合があります。これはモックと呼ばれますモックContextはその例です。)
  • インストルメント化されたテスト。これらのテストは、実際のデバイスまたはエミュレーターで実行されます。そのため、ローカル テストよりも遅くなります。ただし、完全な Android API を利用できるため、より柔軟です。

新しいプロジェクトを作成すると、次のデフォルト フォルダーが表示されます。

ここに画像の説明を入力

すべてがすでにそこにあり、テストを作成するのを待っています。それはすべてすでに設定されています!

ローカル単体テストの作成方法

ExampleUnitTest上の画像に表示されているファイルを開きます。次のようになります。

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}

緑色の二重矢印を押してすべてのテストを実行するか、緑色の単一矢印を押して 1 つのみを実行します。(この場合、テストは 1 つしかないため、両方とも同じことを行います。)

ここに画像の説明を入力

合格するはずです(この回答を読ん2 + 2でいる限り)。4おめでとうございます。最初のテストが完了しました。

独自のテストを作成する

独自のテストを書きましょう。最初に、このクラスをメイン アプリ プロジェクトに追加して、テストするものを用意します。

public class MyClass {
    public int add(int a, int b) {
        return a + b;
    }
}

ここaddition_isCorrect()で、テスト クラスのメソッドを次のコードのように変更します (または別の名前の別のメソッドを追加するだけです)。

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        MyClass myClass = new MyClass();
        int result = myClass.add(2, 2);
        int expected = 4;
        assertEquals(expected, result);
    }
}

もう一度実行すると、パスするはずです。おめでとうございます。これで、独自の最初のテストが作成されました。(まあ、技術的には私のものだと思いますが、まあ、十分に近いです。私のものはあなたのものです。)

インストルメント化されたテストの作成方法

ファイルを開きExampleInstrumentedTestます。次のようになります。

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("com.example.myapp", appContext.getPackageName());
    }
}

これらの緑色のボタンのいずれかをもう一度押します。

ここに画像の説明を入力

実際のデバイスが接続されているか、エミュレータがセットアップされている限り、起動してアプリを実行する必要があります。おめでとうございます。最初のインストルメント化されたテストが実行されました。

独自のテストを作成する

インストルメント化されたテストでは、 Espressoを使用してテストを実行します。アプリをテストできるのは、小さなロボット ユーザーのようなものです。ボタンを押したり、TextView のプロパティを読み取ったりするように指示できます。

テストのやり方は手書きでも構いませんが、始めたばかりなので自動記録機能を使ってみましょう。とてもシンプルです。

最初に UI にボタンを追加して、操作するものを用意します。これは私がしました:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myapp.MainActivity">

    <Button
        android:id="@+id/myButton"
        android:text="Click me"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</android.support.constraint.ConstraintLayout> 

次に、メニューで[実行] > [エスプレッソ テストの記録] を押します。

ここに画像の説明を入力

開始したら、エミュレーターのボタンをクリックし、[記録] ダイアログで [OK] を選択して終了します。次のテスト コードを自動生成する必要があります。

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void mainActivityTest() {
        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.myButton), withText("Click me"), isDisplayed()));
        appCompatButton.perform(click());
    }
}

すごい!これで、最初のインストゥルメンテッド テストが作成されました。それはとても簡単でした。実際のテストを行うには、おそらくアサーションを追加する必要がありますが、それはレコーダーでも非常に簡単に実行できます。このビデオを見て、もう少し深く掘り下げてください。

さらなる研究

最初にビデオを見てから、ドキュメントを読みます。それはすべてかなり役に立ちます。最後のリンクは、何をテストするかを選択する際に考慮すべきいくつかの重要事項をカバーする一連の記事へのリンクです。

于 2017-04-26T06:51:17.150 に答える
36

編集: 0.1.8 以降、これは IDE でサポートされるようになりました。以下の手順を使用する代わりに、そこにある手順に従ってください。

Android Gradle プラグイン ユーザー ガイドに従って、新しく作成したプロジェクトで次の手順を実行することにより、コマンド ラインでテストを実行することができました (デフォルトの 'com.example.myapplication' パッケージを使用しました)。

  1. テスト用に src/instrumentTest/java ディレクトリを追加します
  2. パッケージ com.example.myapplication.test にテスト クラス (ActivityTestCase を拡張) を追加します。
  3. 仮想デバイスを開始する
  4. コマンド ライン (MyApplicationProject/MyApplication ディレクトリ内) で、コマンド '../gradlew connectedInstrumentTest' を使用します。

これでテストが実行され、テスト結果が MyApplicationProject/MyApplication/build/reports/instrumentTests/connected に配置されました。Android アプリのテストは初めてですが、問題なく動作しているようです。

IDE 内から、同じテスト クラスを試して実行することができます。あなたがする必要があります

  1. build.gradle を更新して Maven Central をリポジトリとしてリストする
  2. build.gradle を更新して、JUnit 3.8 を instrumentTestCompile 依存関係として追加します。例: instrumentTestCompile 'junit:junit:3.8'
  3. 「プロジェクト構造」で、手動で JUnit を依存関係の順序の最初に移動します

ただし、これは失敗します (テストの実行時に使用されるクラスパスにテスト出力ディレクトリがありません)。ただし、Android 固有のテスト ランナーが必要であることを理解しているため、これが機能するかどうかはわかりません。

于 2013-06-02T09:22:19.423 に答える
20

gradle.buildファイルを使用することをお勧めします。

  1. テスト用にsrc/androidTest/javaディレクトリを追加します ( Chrisが説明し始めるように)

  2. gradle.buildファイルを開き、そこで指定します

    android {
    
        compileSdkVersion rootProject.compileSdkVersion
        buildToolsVersion rootProject.buildToolsVersion
    
        sourceSets {
    
            androidTest {
                java.srcDirs = ['androidTest/java']
            }
        }
    }
    
  3. 「プロジェクトをGradleファイルと同期」(上部パネル)を押します。「java」フォルダ (「androidTest」内) が緑色になっているはずです。

  4. これで、テスト ファイルを作成して実行できるようになりました。

于 2013-12-03T10:43:28.877 に答える
12

Rex St John によるこの投稿は、android studio での単体テストに非常に役立つと思います。


(ソース: rexstjohn.com )

于 2014-04-14T14:16:12.110 に答える
10

Android Studio v.2.3.3

テストするコード コンテキストを強調表示し、ホットキーを使用します: CTRL+ SHIFT+T

ダイアログ インターフェイスを使用してセットアップを完了します。

テスト フレームワークは、最良の結果を得るためにプロジェクト パッケージのレイアウトを反映することになっていますが、正しいディレクトリとビルド設定があれば、手動でカスタム テストを作成できます。

于 2017-11-01T11:45:31.447 に答える
4

Android Studio は進化を続けているため、上記の対応は最終的には適用できなくなります。現在のバージョンの Android Studio 1.2.1.1 については、テストに関する優れたチュートリアルが次の場所にあります。

http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/

于 2015-05-15T12:48:54.803 に答える
3

主な変更点の 1 つは、Android Studio でテスト アプリケーションがアプリケーション プロジェクトに統合されたことです。

これが特定の問題に役立つかどうかはわかりませんが、Gradle プロジェクトでテストを作成するためのガイドを見つけました。 Android Gradle ユーザーガイド

于 2013-05-30T02:14:25.230 に答える
2

Android Studio は一種の移動ターゲットであり、最初はデベロッパー プレビューであり、現在はベータ版です。プロジェクト内の Test クラスのパスは変更されていますが、使用している AS のバージョンに関係なく、パスは .iml ファイルで宣言されています。現在、バージョン 0.8.3 では、内部の iml ファイル内に次の内容が含まれています。

      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />

.iml ファイルは、テスト クラスを配置する場所を示しています。

于 2014-10-24T07:33:40.677 に答える
2

Android Studio 1.1 の時点で、単体テストの作成が公式 (実験的) にサポートされています (Roboelectric も同様に動作します)。

ソース: https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support

于 2015-02-10T15:47:41.980 に答える