Intellij Ideaに基づいたAndroid Studioをダウンロードしました。
どのようにテストを作成しますか?
テストモジュールを作成するオプションがありますが、これは何もしないようで、srcで新しいプロジェクトを作成するだけです
ホットキーCTRL + AlT + Tを押してみました。これにより、既存のクラスで単体テストを作成できますが、現在のプロジェクトに配置したいようです。もちろん、これはTDDには役立ちません
誰もがここで経験を持っていますか?
この回答は、Androidテストを始めたばかりの人向けです。テストがどのように機能するかを確認するのに役立つ2つの簡単な例を示します。次の10分間続ければ、テストを独自のアプリに追加するための準備がすべて整います。私はあなたがそれがどれほど簡単であるかに驚くだろうと思う。確かにそうだった。
実行するテストには2つの異なるタイプがあります。
Context
は例です。)新しいプロジェクトを作成すると、次のデフォルトのフォルダーが表示されます。
すべてがすでにそこにあり、テストを作成するのを待っています。すべて設定済みです!
上の画像に示されている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のプロパティを読み取るなどの操作を行うように指示できます。
テストを手動で行う方法の手順を記述できますが、開始したばかりなので、 auto-record function を使用しましょう。とても簡単です。
まず、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>
次に、メニューのRun> Espresso Testの記録を押します。
起動後、エミュレータのボタンをクリックしてから、[記録]ダイアログで[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());
}
}
すばらしいです!最初の計装テストを作成しました!それはとても簡単でした。おそらくアサーションを追加して実際のテストにする必要がありますが、それはレコーダーでも簡単に実行できます。 このビデオ を見て、もう少し詳しく見てみましょう。
最初にビデオを見てから、ドキュメントを読みます。それはすべて非常に役立ちます。最後のリンクは、テスト対象を選択する際に考慮すべき重要な事項をカバーする一連の記事へのリンクです。
編集: .1.8現在、IDEでサポートされています 。以下の手順を使用する代わりに、そこの手順に従ってください。
Android Gradle Plugin User Guide に従って、新しく作成されたプロジェクトで次の手順を実行することでコマンドラインでテストを実行できました(デフォルトの 'com.example.myapplication'パッケージを使用しました):
これでテストが実行され、テスト結果がMyApplicationProject/MyApplication/build/reports/instrumentTests/connectedに配置されました。私はAndroidアプリをテストするのは初めてですが、うまくいくようです。
IDE内から、同じテストクラスを試して実行することができます。あなたがする必要があります
ただし、これは失敗します(テストの実行時に使用されるクラスパスにテスト出力ディレクトリがありません)。ただし、Android固有のテストランナーが必要であると理解しているため、これが動作するかどうかはわかりません。
gradle.buildファイルを使用することをお勧めします。
src/androidTest/Javaテスト用のディレクトリを追加します(Chrisが説明を開始します)
gradle.buildファイルを開き、そこに指定します:
Android {
compileSdkVersion rootProject.compileSdkVersion
buildToolsVersion rootProject.buildToolsVersion
sourceSets {
androidTest {
Java.srcDirs = ['androidTest/Java']
}
}
}
「プロジェクトをGradleファイルと同期」(トップパネル)を押します。フォルダー「Java」(「androidTest」内)が緑色になっているはずです。
これで、テストファイルを作成して実行できます。
この投稿 Rex St JohnによるAndroid studioでのユニットテストには非常に便利だと思います。
http://rexstjohn.com/wp-content/uploads/2014/01/Screen-Shot-2014-01-24-at-6.26.20-PM-300x137.png
Android Studio v.2.3.3
テストするコードコンテキストを強調表示し、ホットキーを使用します:CTRL
+ SHIFT
+ T
ダイアログインターフェイスを使用して、セットアップを完了します。
テストフレームワークは、最良の結果を得るためにプロジェクトパッケージレイアウトをミラー化することになっていますが、正しいディレクトリとビルド設定があれば、カスタムテストを手動で作成できます。
現在(スタジオ0.61)、適切なプロジェクト構造を維持するだけで十分です。 Eclipseのように個別のテストプロジェクトを作成する必要はありません(以下を参照)。
Android Studioは進化し続けているため、上記の回答は最終的には適用できなくなります。 Android Studio 1.2.1.1の現在のバージョンについては、テストに関する素敵なチュートリアルがあります:
http://evgenii.com/blog/testing-activity-in-Android-studio-tutorial-part-1/
主な変更点の1つは、Android Studioを使用すると、テストアプリケーションがアプリケーションプロジェクトに統合されることです。
これが特定の問題に役立つかどうかはわかりませんが、Gradleプロジェクトでテストを作成するためのガイドを見つけました。 Android Gradleユーザーガイド
私が見つけた最も簡単な方法は、 私の次のブログ投稿 で合理化されたものです:
コードを読みやすく、保守しやすく、十分にテストしてください。
Android Studioは、最初は開発者向けのプレビューであり、現在はベータ版であるため、動いているターゲットの1つです。プロジェクト内のテストクラスのパスは時間の経過とともに変化しますが、使用している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ファイルは、テストクラスを配置する場所を示しています。
Android Studio 1.1の時点で、ユニットテスト(Roboelectricも同様)を作成するための公式(実験的)サポートがあります。
ソース: https://sites.google.com/a/Android.com/tools/tech-docs/unit-testing-support
Gradleファイル内に以下のlibを追加します
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
AndroidTestディレクトリ内にHomeActivityTestクラスを作成し、テストを実行する前に、文字列リソースファイル内にflurry_api_keyおよびsender_id文字列を追加し、失敗および成功の場合の値を変更します。
@RunWith(AndroidJUnit4.class)
public class HomeActivityTest
{
private static final String SENDER_ID = "abc";
private static final String RELEASE_FLURRY_API_KEY = "xyz";
@Test
public void gcmRegistrationId_isCorrect() throws Exception
{
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Assert.assertEquals(SENDER_ID, appContext.getString(R.string.sender_id));
}
@Test
public void flurryApiKey_isCorrect() throws Exception
{
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Assert.assertEquals(RELEASE_FLURRY_API_KEY, appContext.getString(R.string.flurry_api_key));
}
}