کلاس AndroidJUnitRunner
یک برنامه آزمایشی JUnit است که به شما امکان میدهد تستهای JUnit 4 را بر روی دستگاههای Android، از جمله مواردی که از چارچوبهای تست Espresso ، UI Automator و Compose استفاده میکنند، اجرا کنید.
دونده آزمایش بارگیری بسته آزمایشی شما و برنامه تحت آزمایش را در دستگاهی انجام می دهد، آزمایش های شما را اجرا می کند و نتایج آزمایش را گزارش می دهد.
این دونده آزمایشی از چندین کار آزمایشی رایج پشتیبانی می کند، از جمله موارد زیر:
تست های JUnit را بنویسید
قطعه کد زیر نشان میدهد که چگونه میتوانید یک تست JUnit 4 را بنویسید تا تأیید کنید که عملیات changeText
در کلاس ChangeTextBehavior
به درستی کار میکند:
کاتلین
@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation class ChangeTextBehaviorTest { val stringToBeTyped = "Espresso" // ActivityTestRule accesses context through the runner @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()) onView(withId(R.id.changeTextBt)).perform(click()) // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))) } }
جاوا
@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation public class ChangeTextBehaviorTest { private static final String stringToBeTyped = "Espresso"; @Rule public ActivityTestRule<MainActivity>; activityRule = new ActivityTestRule<>;(MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()); onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))); } }
به متن برنامه دسترسی پیدا کنید
هنگامی که از AndroidJUnitRunner
برای اجرای تستهای خود استفاده میکنید، میتوانید با فراخوانی متد استاتیک ApplicationProvider.getApplicationContext()
به زمینه برنامه تحت آزمایش دسترسی پیدا کنید. اگر یک زیر کلاس سفارشی از Application
در برنامه خود ایجاد کرده اید، این روش زمینه زیر کلاس سفارشی شما را برمی گرداند.
اگر پیادهکننده ابزار هستید، میتوانید با استفاده از کلاس InstrumentationRegistry
به APIهای تست سطح پایین دسترسی داشته باشید. این کلاس شامل شیء Instrumentation
، شیء Context
برنامه هدف، شیء Context
برنامه آزمایشی، و آرگومان های خط فرمان است که به تست شما ارسال می شود.
تست های فیلتر
در تست های JUnit 4.x خود، می توانید از حاشیه نویسی برای پیکربندی اجرای آزمایشی استفاده کنید. این ویژگی نیاز به افزودن دیگ بخار و کد شرطی را در تست های شما به حداقل می رساند. علاوه بر حاشیه نویسی های استاندارد پشتیبانی شده توسط JUnit 4، برنامه آزمایشی از حاشیه نویسی های خاص اندروید نیز پشتیبانی می کند، از جمله موارد زیر:
-
@RequiresDevice
: مشخص می کند که آزمایش فقط بر روی دستگاه های فیزیکی اجرا شود، نه بر روی شبیه سازها. -
@SdkSuppress
: اجرای آزمایش را در سطح API Android پایینتر از سطح داده شده متوقف میکند. برای مثال، برای جلوگیری از اجرای آزمایشها در تمام سطوح API کمتر از 23، از حاشیهنویسی@SDKSuppress(minSdkVersion=23)
استفاده کنید. -
@SmallTest
،@MediumTest
، و@LargeTest
: طبقهبندی کنید که یک تست چقدر طول میکشد تا اجرا شود، و در نتیجه، چقدر میتوانید آزمایش را اجرا کنید. با تنظیم ویژگیandroid.testInstrumentationRunnerArguments.size
، میتوانید از این حاشیهنویسی برای فیلتر کردن آزمایشهایی که باید اجرا شوند استفاده کنید:
-Pandroid.testInstrumentationRunnerArguments.size=small
تست های شارد
اگر میخواهید اجرای آزمایشهای خود را موازی کنید، آنها را در چندین سرور به اشتراک بگذارید تا سریعتر اجرا شوند، میتوانید آنها را به گروهها یا خردههایی تقسیم کنید. اجرای آزمایشی از تقسیم یک مجموعه آزمایشی به چند قطعه پشتیبانی میکند، بنابراین میتوانید به راحتی آزمایشهای متعلق به همان قطعه را با هم به عنوان یک گروه اجرا کنید. هر خرده با یک عدد شاخص مشخص می شود. هنگام اجرای تستها، از گزینه -e numShards
برای تعیین تعداد خردههای جداگانه برای ایجاد و از گزینه -e shardIndex
برای تعیین اینکه کدام قطعه باید اجرا شود استفاده کنید.
به عنوان مثال، برای تقسیم مجموعه آزمایشی به 10 قطعه و اجرای تنها تست های گروه بندی شده در قطعه دوم، از دستور adb زیر استفاده کنید:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
از Android Test Orchestrator استفاده کنید
Android Test Orchestrator به شما امکان می دهد هر یک از تست های برنامه خود را در فراخوانی خود از Instrumentation
اجرا کنید. هنگام استفاده از AndroidJUnitRunner نسخه 1.0 یا بالاتر، به Android Test Orchestrator دسترسی دارید.
Android Test Orchestrator مزایای زیر را برای محیط تست شما ارائه می دهد:
- حداقل حالت مشترک: هر آزمایش در نمونه
Instrumentation
خود اجرا می شود. بنابراین، اگر آزمایشهای شما حالت برنامه را به اشتراک بگذارند، بیشتر آن حالت اشتراکگذاری شده پس از هر آزمایش از CPU یا حافظه دستگاه شما حذف میشود. برای حذف تمام حالت های مشترک از CPU و حافظه دستگاه خود پس از هر آزمایش، از پرچمclearPackageData
استفاده کنید. برای مثال به بخش Enable from Gradle مراجعه کنید. - خرابی ها جدا می شوند: حتی اگر یک تست خراب شود، فقط نمونه خودش از
Instrumentation
را حذف می کند. این بدان معناست که سایر تستهای مجموعه شما همچنان اجرا میشوند و نتایج کامل آزمون را ارائه میدهند.
این جداسازی منجر به افزایش احتمالی زمان اجرای آزمایش میشود، زیرا برنامهساز تست Android پس از هر آزمایش، برنامه را مجدداً راهاندازی میکند.
هم Android Studio و هم Firebase Test Lab دارای Android Test Orchestrator از پیش نصب شده هستند، اگرچه باید این ویژگی را در Android Studio فعال کنید .
از Gradle فعال کنید
برای فعال کردن Android Test Orchestrator با استفاده از ابزار خط فرمان Gradle، این مراحل را کامل کنید:
- مرحله 1 : فایل gradle را تغییر دهید. عبارات زیر را به فایل
build.gradle
پروژه خود اضافه کنید:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
- مرحله 2 : Android Test Orchestrator را با اجرای دستور زیر اجرا کنید:
./gradlew connectedCheck
از Android Studio فعال کنید
برای فعال کردن Android Test Orchestrator در Android Studio، عبارات نشان داده شده در Enable from Gradle را به فایل build.gradle
برنامه خود اضافه کنید.
فعال کردن از خط فرمان
برای استفاده از Android Test Orchestrator در خط فرمان، دستورات زیر را در پنجره ترمینال اجرا کنید:
DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)
FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
FORCE_QUERYABLE_OPTION="--force-queryable"
fi
# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator
# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk
# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk
# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
همانطور که دستور دستور نشان می دهد، Android Test Orchestrator را نصب می کنید، سپس مستقیماً از آن استفاده می کنید.
adb shell pm list instrumentation
استفاده از زنجیره های ابزار مختلف
اگر از زنجیره ابزار دیگری برای آزمایش برنامه خود استفاده می کنید، همچنان می توانید با انجام مراحل زیر از Android Test Orchestrator استفاده کنید:
- بسته های لازم را در فایل ساخت اپلیکیشن خود قرار دهید.
- Android Test Orchestrator را از خط فرمان فعال کنید.
معماری
APK سرویس Orchestrator در فرآیندی جدا از APK آزمایشی و APK برنامه تحت آزمایش ذخیره میشود:
Android Test Orchestrator تستهای JUnit را در ابتدای اجرای مجموعه آزمایشی شما جمعآوری میکند، اما سپس هر تست را بهطور جداگانه، در نمونه خودش از Instrumentation
اجرا میکند.
اطلاعات بیشتر
برای کسب اطلاعات بیشتر در مورد استفاده از AndroidJUnitRunner، به مرجع API مراجعه کنید.
منابع اضافی
برای اطلاعات بیشتر در مورد استفاده از AndroidJUnitRunner
، به منابع زیر مراجعه کنید.
نمونه ها
- AndroidJunitRunnerSample : حاشیه نویسی های آزمایشی، تست های پارامتری شده و ایجاد مجموعه آزمایشی را به نمایش می گذارد.