インストルメンテーション テストは、物理デバイスかエミュレートされたデバイスかにかかわらず、Android デバイス上で実行されます。として Android フレームワーク API を利用できます。インストルメンテーション テスト ローカルテストよりも忠実度に優れていますが、ローカルテストよりも できます。
インストルメンテーション テストは、 動作を確認してみましょう。AndroidX Test には複数のライブラリが用意されています。 必要に応じてインストルメンテーション テストを簡単に作成できます。
テスト環境をセットアップする
Android Studio プロジェクトでは、インストルメント化されたアプリのソースファイルを格納します。
module-name/src/androidTest/java/
のテスト。このディレクトリはすでに存在しています:
新しいプロジェクトを作成し、インストルメンテーション テストのサンプルを含めます。
始める前に、AndroidX Test API を追加しておく必要があります。これにより、
アプリのインストルメンテーション テストコードをビルドして実行します。AndroidX Test は、
JUnit 4 のテストランナー、AndroidJUnitRunner
、および UI の機能テスト用の API
たとえば、Espresso、UI Automator、Compose テストなどです。
また、プロジェクトの Android テスト依存関係を構成して、 AndroidX Test が提供するテストランナーとルール API を使用します。
アプリの最上位の build.gradle
ファイルで、これらのライブラリを指定する必要があります。
使用します。
dependencies {
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
// Optional -- UI testing with Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
// Optional -- UI testing with UI Automator
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
// Optional -- UI testing with Compose
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}
最新バージョンは AndroidX リリースノートと Compose で入手できます。 UI リリースノートをご覧ください。
JUnit 4 のテストクラスを使用し、テストのフィルタリングなどの機能を利用するには、
AndroidJUnitRunner をデフォルトのテスト インストルメンテーションとして指定してください。
使用するには、アプリの
モジュール レベルの build.gradle
ファイル:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
インストルメンテーション テストクラスを作成する
インストルメンテーション テスト クラスは、 ローカルテストのビルド方法のセクションで説明されているクラス。
インストルメント化された JUnit 4 テストクラスを作成するには、次のように AndroidJUnit4
を指定します。
あります。
次の例は、インストルメンテーション テストを作成して検証する方法を示しています。
Parcelable インターフェースが
LogHistory
クラス:
Kotlin
import android.os.Parcel import android.text.TextUtils.writeToParcel import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith const val TEST_STRING = "This is a string" const val TEST_LONG = 12345678L // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @SmallTest class LogHistoryAndroidUnitTest { private lateinit var logHistory: LogHistory @Before fun createLogHistory() { logHistory = LogHistory() } @Test fun logHistory_ParcelableWriteRead() { val parcel = Parcel.obtain() logHistory.apply { // Set up the Parcelable object to send and receive. addEntry(TEST_STRING, TEST_LONG) // Write the data. writeToParcel(parcel, describeContents()) } // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0) // Read the data. val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel) createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> -> // Verify that the received data is correct. assertThat(createdFromParcelData.size).isEqualTo(1) assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING) assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG) } } }
Java
import android.os.Parcel; import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.google.common.truth.Truth.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4.class) public class LogHistoryAndroidUnitTest { public static final String TEST_STRING = "This is a string"; public static final long TEST_LONG = 12345678L; private LogHistory mLogHistory; @Before public void createLogHistory() { mLogHistory = new LogHistory(); } @Test public void logHistory_ParcelableWriteRead() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. assertThat(createdFromParcelData.size()).isEqualTo(1); assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING); assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG); } }
インストルメンテーション テストを実行する
インストルメンテーション テストは、実際のデバイスまたはエミュレータで実行できます。Android Studio ガイドでは、以下の方法を学ぶことができます。
参考情報
UI テストは通常、アプリの正しい動作を検証するインストルメンテーション テストです。 できます。Espresso や Compose Test などのフレームワークを使用します。学習内容 詳しくは、UI テストガイドをご覧ください。
インストルメンテーション テストの使用について詳しくは、以下をご覧ください。 説明します。