Intellij Ideaに基づいたAndroid Studioをダウンロードしました。
どのようにしてテストを作成しますか?
テストモジュールを作成するオプションがあることに気づきましたが、これは何もしないようで、srcで新しいプロジェクトを作成するだけです
また、既存のクラスでユニットテストを作成できるCTRL + AlT + Tのホットキーを押してみましたが、現在のプロジェクトに配置したいようです。もちろん、これはTDDには役立ちません
誰かここで何か経験がありますか?
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());
}
}
緑色のボタンの1つをもう一度押します。
実際のデバイスが接続されているか、エミュレータがセットアップされている限り、デバイスが起動してアプリが実行されているはずです。おめでとうございます。最初のインストゥルメンテーションテストを実行しました。
独自のテストを行う
インストルメント化されたテストは、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());
}
}
すごい!これで、最初のインストゥルメントテストが作成されました。それはとても簡単でした。実際のテストにするためには、アサーションを追加する必要がありますが、これはレコーダーでも簡単に実行できます。見るこのビデオを少し深く行くことに。
最初にビデオを見てから、ドキュメントを読みます。それはすべてかなり役に立ちます。最後のリンクは、何をテストするかを選択するときに考慮すべきいくつかの重要な事項をカバーする一連の記事へのリンクです。
/app
から実行されますが、Gradleコマンドライン(またはCI)から実行した場合は、 _root。(理想的には、assets
どちらかの方法で実行したときに特定のフォルダにアクセスしたい)。
test/resources
を作成してそこにファイルを置く、たとえばでファイルにtest.txt
アクセスする、と書いてありますgetClass().getClassLoader().getResource("test.txt")
。APKアセットに直接アクセスすることはおそらく悪い考えであると判断したので、ビルドステップでテストするファイルをコピーするか、外部の更新プロセスで対処します。Gradleの異なるバージョンについては、いくつか疑問が残っていますが、私はまだそれに直面していません。
編集:0.1.8以降、これはIDEでサポートされています。以下の手順を使用する代わりに、そこにある手順に従ってください。
以下のアンドロイドのGradleプラグインユーザガイド私は(私はデフォルトの「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でのユニットテストに非常に役立つと思います。
(ソース:rexstjohn.com)
Android Studio v.2.3.3
テストするコードコンテキストを強調表示し、ホットキーを使用します:CTRL
+ SHIFT
+T
ダイアログインターフェイスを使用してセットアップを完了します。
テストフレームワークは、最良の結果を得るためにプロジェクトパッケージレイアウトをミラーリングすることになっていますが、正しいディレクトリとビルド設定があれば、カスタムテストを手動で作成できます。
Android Studioは進化し続けているため、上記の応答は最終的には適用されなくなります。Android Studio 1.2.1.1の現在のバージョンについては、テストに関する素晴らしいチュートリアルがあります。
http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/
Android Studioを使用すると、テストアプリケーションがアプリケーションプロジェクトに統合されるようです。
これがあなたの特定の問題に役立つかどうかはわかりませんが、Gradleプロジェクトでテストを行うためのガイドを見つけました。 Android Gradleユーザーガイド
私が見つけた最も簡単な方法は、私の次のブログ投稿で合理化されています:
コードを読みやすく、保守しやすく、十分にテストされた状態で頑張ってください!
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ファイルは、テストクラスを配置する場所を示しています。
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));
}
}