הכיתה AndroidJUnitRunner
היא הרצת מבחן של JUnit
מאפשר להריץ בדיקות JUnit 4 במכשיר Android,
כולל אלה שמשתמשים ב-Espresso, בUI Automator וב-Compose (כתיבה)
של מסגרות להתנסות.
הרצת הבדיקה מטפלת בטעינת חבילת הבדיקה והאפליקציה שנבדקת הרצת הבדיקות ודיווח על תוצאות הבדיקה.
תוכנת ההרצה הזו תומכת בכמה משימות בדיקה נפוצות, כולל:
כתיבה של בדיקות JUnit
בקטע הקוד הבא אפשר לראות איך אפשר לכתוב JUnit 4 עם אינסטרומנטציה
צריך לבדוק שהפעולה changeText
בChangeTextBehavior
הכיתה פועלת בצורה תקינה:
Kotlin
@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))) } }
Java
@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 ActivityTestRuleM<ainActivity;> 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
באפליקציה שלך, השיטה הזו תחזיר את
את ההקשר של המחלקה המשנית.
מטמיעי כלים יכולים לגשת לממשקי API לבדיקה ברמה נמוכה באמצעות
InstrumentationRegistry
. הכיתה הזו כוללת את
Instrumentation
, האובייקט של אפליקציית היעד Context
, הבדיקה
את האובייקט Context
של האפליקציה, ואת הארגומנטים בשורת הפקודה שמועברים לבדיקה.
סינון הבדיקות
בבדיקות של JUnit 4.x, תוכלו להשתמש בהערות כדי להגדיר את הרצת הבדיקה. הזה תפחית את הצורך להוסיף סטנדרטיזציה וקוד מותנה בדיקות. בנוסף להערות הרגילות שנתמכות ב-JUnit 4, הבדיקה אפליקציית Runner גם תומכת בהערות ספציפיות ל-Android, כולל הבאים:
@RequiresDevice
: מציין שהבדיקה צריכה להתבצע רק במכשירים פיזיים ולא במכשירי אמולטורים.@SdkSuppress
: מונע את הפעלת הבדיקה בגרסה נמוכה יותר של Android API שלב מהרמה הנתונה. לדוגמה, כדי להסתיר בדיקות בכל רמות ה-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'
תזמור הבדיקות של Android מאפשר לך להריץ כל אחת מהבדיקות של האפליקציה בתוך
הפעלה של Instrumentation
. כשמשתמשים ב-AndroidJUnitRunner בגרסה 1.0
ומעלה, יש לך גישה ל'תזמור בדיקות של Android'.
תזמור הבדיקות של Android מציע את היתרונות הבאים לצורך הבדיקה שלך סביבה:
- מצב משותף מינימלי: כל בדיקה פועלת ב
Instrumentation
משלה מכונה. לכן, אם הבדיקות זהות למצב האפליקציה, רוב המצב המשותף יוסרו מהמעבד או מהזיכרון של המכשיר אחרי כל בדיקה. כדי להסיר את כל המצבים המשותפים מהמעבד (CPU) של המכשיר ומהזיכרון לאחר כל אחד בבדיקה, משתמשים בדגלclearPackageData
. ראו הפעלה מ-Gradle . - תאונות מבודדות: גם אם ניסיון אחד קורס, הוא מסיר רק את
מופע משלך של
Instrumentation
. המשמעות היא שהבדיקות האחרות החבילה עדיין פועלת, ומספקת תוצאות בדיקה מלאות.
בידוד זה מוביל להגדלה אפשרית של זמן הביצוע של הבדיקה, תזמור הבדיקות של Android מפעיל מחדש את האפליקציה אחרי כל בדיקה.
גם ל-Android Studio וגם ל-Firebase Test Lab יש תזמור בדיקות של Android מותקן מראש, אבל צריך להפעיל את התכונה ב-Android Studio.
הפעלה מ-Gradle
כדי להפעיל תזמור בדיקות של Android באמצעות כלי שורת הפקודה 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:
./gradlew connectedCheck
הפעלה מ-Android Studio
כדי להפעיל תזמור בדיקות של Android ב-Android Studio, יש להוסיף את ההצהרות המוצגות
בקטע Enable from Gradle (הפעלה מ-Gradle) לקובץ build.gradle
של האפליקציה.
הפעלה משורת הפקודה
כדי להשתמש תזמור בדיקות של Android בשורת הפקודה, מריצים את הפקודות הבאות בחלון הטרמינל:
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זהor, ולאחר מכן משתמשים בו. ישירות.
adb shell pm list instrumentation
שימוש ב'שרשראות כלים שונות'
אם משתמשים ב-toolchain אחר כדי לבדוק את האפליקציה, עדיין אפשר להשתמש ב-Android תזמור בדיקה. לשם כך, צריך לבצע את השלבים הבאים:
- צריך לכלול את החבילות הנדרשות בקובץ ה-build של האפליקציה.
- הפעלת תזמור בדיקות של Android משורת הפקודה.
ארכיטקטורה
ה-APK של שירות התזמור מאוחסן בתהליך נפרד את ה-APK לבדיקה ואת ה-APK של האפליקציה שנמצאת בבדיקה:
![המתזמר מאפשר לשלוט בבדיקות JUnit](https://developer.android.com/static/training/testing/instrumented-tests/androidx-test-libraries/orchestrator.png?authuser=9&hl=he)
תזמור הבדיקות של Android אוסף בדיקות JUnit בתחילת הבדיקה
אבל לאחר מכן היא עורכת כל בדיקה בנפרד, במופע נפרד של
Instrumentation
מידע נוסף
מידע נוסף על השימוש ב-AndroidJUnitRunner זמין בחומר העזר בנושא API.
מקורות מידע נוספים
לקבלת מידע נוסף על השימוש ב-AndroidJUnitRunner
, אפשר לעיין במאמרים הבאים:
במשאבי אנוש.
דוגמיות
- AndroidJunitRunnerSample: הצגת הערות הבדיקה בדיקות עם פרמטרים ספציפיים ויצירת חבילות בדיקה.