تستهای ابزاری بر روی دستگاههای اندرویدی اجرا میشوند، چه فیزیکی و چه شبیهسازی شده. به این ترتیب، آنها می توانند از APIهای فریمورک اندروید بهره ببرند. بنابراین تستهای ابزار دقیق وفاداری بیشتری نسبت به تستهای محلی ارائه میکنند، هرچند که بسیار کندتر اجرا میشوند.
توصیه میکنیم از تستهای ابزاردار فقط در مواردی استفاده کنید که باید رفتار یک دستگاه واقعی را آزمایش کنید. AndroidX Test چندین کتابخانه فراهم می کند که نوشتن تست های ابزاری را در صورت لزوم آسان تر می کند.
محیط تست خود را تنظیم کنید
در پروژه Android Studio خود، فایلهای منبع را برای تستهای ابزاردار در module-name/src/androidTest/java/
ذخیره میکنید. این دایرکتوری از قبل در هنگام ایجاد یک پروژه جدید وجود دارد و شامل یک نمونه تست ابزاری است.
قبل از شروع، باید APIهای تست AndroidX را اضافه کنید، که به شما امکان میدهد به سرعت کدهای تست ابزاری را برای برنامههای خود بسازید و اجرا کنید. AndroidX Test شامل یک برنامه آزمایشی JUnit 4، AndroidJUnitRunner
و APIهایی برای تستهای رابط کاربری کاربردی مانند Espresso ، UI Automator و Compose است .
همچنین باید وابستگیهای تست اندروید را برای پروژه خود پیکربندی کنید تا از اجرای آزمایشی و APIهای قوانین ارائه شده توسط AndroidX Test استفاده کند.
در فایل 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 Release Notes پیدا کنید.
برای استفاده از کلاسهای آزمایشی JUnit 4 و دسترسی به ویژگیهایی مانند فیلتر کردن تست، حتما AndroidJUnitRunner را بهعنوان پیشفرض تست ابزار دقیق در پروژه خود با قرار دادن تنظیمات زیر در فایل build.gradle
در سطح ماژول برنامه خود مشخص کنید:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
یک کلاس تست ابزاردار ایجاد کنید
کلاس تست ابزاردار شما باید یک کلاس آزمایشی JUnit 4 باشد که مشابه کلاس توضیح داده شده در بخش نحوه ساخت تست های محلی است.
برای ایجاد یک کلاس آزمایشی JUnit 4 ابزاردار، AndroidJUnit4
را به عنوان اجرای آزمایشی پیشفرض خود مشخص کنید.
مثال زیر نشان می دهد که چگونه می توانید یک تست ابزاری بنویسید تا تأیید کنید که رابط Parcelable به درستی برای کلاس LogHistory
پیاده سازی شده است:
کاتلین
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) } } }
جاوا
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 معمولاً تستهای ابزاری هستند که رفتار صحیح UI را تأیید میکنند. آنها از چارچوب هایی مانند Espresso یا Compose Test استفاده می کنند. برای کسب اطلاعات بیشتر، راهنمای تست رابط کاربری را بخوانید.
برای اطلاعات بیشتر در مورد استفاده از آزمون های ابزار دقیق، به منابع زیر مراجعه کنید.