AndroidJUnitRunner

הכיתה 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 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 באפליקציה שלך, השיטה הזו תחזיר את את ההקשר של המחלקה המשנית.

מטמיעי כלים יכולים לגשת לממשקי 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 Systemtor ולאחר מכן משתמשים בו. ישירות.

adb shell pm list instrumentation

שימוש ב'שרשראות כלים שונות'

אם משתמשים ב-toolchain אחר כדי לבדוק את האפליקציה, עדיין אפשר להשתמש ב-Android תזמור בדיקה. לשם כך, צריך לבצע את השלבים הבאים:

  1. צריך לכלול את החבילות הנדרשות בקובץ ה-build של האפליקציה.
  2. הפעלת תזמור בדיקות של Android משורת הפקודה.

ארכיטקטורה

ה-APK של שירות התזמור מאוחסן בתהליך נפרד את ה-APK לבדיקה ואת ה-APK של האפליקציה שנמצאת בבדיקה:

המתזמר מאפשר לשלוט בבדיקות JUnit
איור 1: מבנה ה-APK של תזמור בדיקות Android.

תזמור הבדיקה של Android אוסף בדיקות JUnit בתחילת הבדיקה אבל לאחר מכן היא עורכת כל בדיקה בנפרד, במופע נפרד של Instrumentation

מידע נוסף

מידע נוסף על השימוש ב-AndroidJUnitRunner זמין בחומר העזר בנושא API.

מקורות מידע נוספים

לקבלת מידע נוסף על השימוש ב-AndroidJUnitRunner, אפשר לעיין במאמרים הבאים: המשאבים.

דוגמיות

  • AndroidJunitRunnerSample: הצגת הערות הבדיקה בדיקות עם פרמטרים ספציפיים ויצירת חבילות בדיקה.