آزمایشهای ابزاردار روی دستگاههای Android، چه فیزیکی و چه شبیهسازیشده، اجرا میشوند. بنابراین، میتوانند از میاناهای برنامهسازی کاربردی چارچوب Android بهره ببرند. بنابراین، آزمایشهای ابزاردار نسبتبه آزمایشهای محلی وفاداری بیشتری ارائه میدهند، هرچند بسیار کندتر اجرا میشوند.
توصیه میکنیم فقط در مواردی از آزمایشهای ابزاردار استفاده کنید که باید دربرابر رفتار دستگاه واقعی آزمایش کنید. AndroidX Test چندین کتابخانه ارائه میدهد که نوشتن آزمایشهای ابزاردار را درصورت لزوم آسانتر میکند.
راهاندازی محیط آزمایشی
در پروژه «استودیو Android»، فایلهای منبع را برای آزمایشهای ابزاردار در module-name/src/androidTest/java/ ذخیره میکنید. این دایرکتوری ازقبل وجود دارد وقتیکه
پروژه جدیدی ایجاد میکنید و حاوی نمونه آزمایش ابزاردار است.
قبلاز شروع، باید AndroidX Test APIs را اضافه کنید که به شما امکان میدهد بهسرعت
کد آزمایش ابزاردار را برای برنامههایتان بسازید و اجرا کنید. AndroidX Test شامل یک
اجراکننده آزمایش JUnit 4، AndroidJUnitRunner، و میاناهای برنامهسازی کاربردی برای آزمایشهای واسط کاربر کاربردی
مثل Espresso، UI Automator، و آزمایش Compose است.
همچنین باید وابستگیهای آزمایشی Android را برای پروژهتان پیکربندی کنید تا از اجراکننده آزمایشی و میاناهای برنامهسازی کاربردی قوانین ارائهشده توسط 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 پیدا کنید.
برای استفاده از کلاسهای آزمایشی 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» میتوانید با نحوه انجام کارهای زیر آشنا شوید:
منابع بیشتر
آزمایشهای میانای کاربر معمولاً آزمایشهای «ابزاردار» هستند که رفتار صحیح میانای کاربر را تأیید میکنند. این آزمایشها از چارچوبهایی مثل Espresso یا Compose Test استفاده میکنند. برای کسب اطلاعات بیشتر، راهنمای آزمایش میانای کاربر را بخوانید.
برای اطلاعات بیشتر درباره استفاده از آزمایشهای «ابزار دقیق»، به منابع زیر مراجعه کنید.