כתיבת בדיקה ללא מכשיר בצד המארח ב-TF

בדף הזה מוסבר איך לכתוב בדיקה בצד המארח שלא דורשת מכשיר, כמו בדיקה שמופעלת במופע Linux GCE. (פרטים על כתיבת בדיקה מבוססת-מארח שדורשת מכשיר זמינים במאמר בנושא כתיבת בדיקה מבוססת-מארח ב-Trade Federation).

סוגי בדיקות בצד המארח

אפשר להריץ כמה סוגים של בדיקות בצד המארח באמצעות Trade Federation‏ (TF).

בדיקות Native ‏ (gtest)

יוצרים בדיקות מותאמות (gtests) כדי לבדוק פלטפורמה. אם הבדיקה לא דורשת מכשיר, מריצים אותה במארח. כך הבדיקה תרוץ הרבה יותר מהר. כדי להגדיר בדיקות כאלה להרצה במארח בדיקה, משתמשים ב-TF runner HostGTest.

זוהי דוגמה להגדרות בדיקה של TradeFed:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

הגדרת הבדיקה מריצה בדיקת gtest‏ (hello_world_test) במארח. אפשר ליצור באופן אוטומטי את קובץ ההגדרות של בדיקת הדוגמה. אלא אם הבדיקה שלכם דורשת הגדרה או ניקוי מיוחדים, אתם יכולים להסתמך על יצירה אוטומטית של הגדרות בדיקה כדי ליצור הגדרות בדיקה מתאימות של TF.

כדי להגדיר gtest בצד המארח ולהפעיל יצירה אוטומטית של הגדרות בדיקה, מגדירים את host_supported ל-true ב- Android.bp, כמו ב-hello_world_test.

מידע נוסף על כתיבת בדיקה מקורית זמין במאמר הוספת בדיקה מקורית חדשה: דוגמה.

בדיקות של מארחי JAR

בדיקות של מארח JAR‏ (Java), כמו JUnit, הן בדיקות שלא צריך להריץ במכשיר, והן מספקות כיסוי קוד של פרויקט Java. אפשר להגדיר את הבדיקות האלה להרצה במארח בדיקה באמצעות הרצת HostTest.

דוגמה להגדרות בדיקה ב-TradeFed

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

הגדרת הבדיקה מריצה בדיקת JUnit בצד המארח של HelloWorldHostTest. הערה: אפשר ליצור את הגדרות הבדיקה שלמעלה באופן אוטומטי. אלא אם הבדיקה שלכם דורשת הגדרה או ניקוי מיוחדים, כדאי להסתמך על יצירת הגדרות בדיקה אוטומטית כדי ליצור הגדרת בדיקה מתאימה של TradeFed.

פרטים נוספים על כתיבת בדיקת מארח JAR זמינים בדף בדיקות מארח JAR (Java).

בדיקות של מארחי Java מבודדים

אפשר להריץ בדיקות Java ללא מכשיר בסביבה מבודדת, אבל זה עלול לפגוע בביצועים. עם זאת, יש כמה שיקולים חשובים שכדאי לקחת בחשבון לפני שבוחרים להשתמש בסביבה הזו.

  • זהו הרץ שמוגדר כברירת מחדל לשימוש בבדיקות יחידה של Robolectric ו-JUnit
  • ‫Tradefed תומך רק בבדיקות JUnit בסביבת הבידוד.
  • יש תמיכה רק ביחסי תלות שמקושרים באופן סטטי. לא מוצהרות תלויות עם lib שכלולות בנתיב המחלקה.
  • ה-runner של הבידוד מכניס רק את ה-runner של ה-shim ואת קובץ ה-jar של הבדיקה לנתיב המחלקה.
  • יש תקורה קבועה מסוימת לכל הרצת בדיקה שמתבצעת באמצעות הרץ הזה.

דוגמה להגדרת בדיקה של Tradefed (מבודדת)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

דוגמה להגדרת Soong ליצירה אוטומטית

במקום ליצור את הגדרת הבדיקה באופן ידני כמו בדוגמה שלמעלה, אפשר להשתמש ב-Soong כדי ליצור את ההגדרה באופן אוטומטי באמצעות הצהרה כמו בדוגמה הזו.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

בדיקות Robolectric

בבדיקות Robolectric נעשה שימוש באותו רכיב הפעלה כמו בבדיקות המבודדות של המארח, עם כמה אפשרויות מיוחדות.

  • האפשרות robolectric-resources מאפשרת להעביר כמה אפשרויות ספציפיות של שורת הפקודה של Robolectric לתהליך המשנה, וגם מוסיפה את בניית העץ של android-all לנתיב המחלקה של תהליך המשנה. שתי האפשרויות האחרות הן שיטות מומלצות, אבל האפשרות הזו היא חובה כדי להריץ בדיקות Robolectric בהצלחה.
  • האפשרות java-folder מאפשרת לשנות את זמן הריצה של Java שמשמש את תהליך המשנה. הדבר נדרש כי Robolectric מעדיף גרסאות Java מסוימות, שאולי לא תואמות ל-JVM המועדף של מערכת המארח.
  • האפשרות exclude-paths מאפשרת להפעיל את התהליך המשני בלי לטעון מודולים מסוימים, וזה שימושי כשקובץ JAR מגיע עם מחלקות מיותרות שעלולות לגרום לשגיאות טעינה. ‫java. היא החרגה נפוצה, כדי להימנע מהצגת חריגות של SecurityException.

דוגמה להגדרות של Robolectric

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

דוגמה להגדרת Soong ליצירה אוטומטית של Robolectric

במקום ליצור את הגדרת הבדיקה באופן ידני כמו בדוגמה שלמעלה, אפשר להשתמש ב-Soong כדי ליצור את ההגדרה באופן אוטומטי באמצעות הצהרה כמו בדוגמה הזו.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Python test

אם לוגיקת הבדיקה כתובה ב-Python, משתמשים בסוג build‏ python_test_host כדי ליצור קובץ par שאפשר להפעיל באמצעות TF‏ PythonBinaryHostTest.

דוגמה להגדרות בדיקה ב-TradeFed

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

הגדרה של חבילת בדיקות

כדי ש-TF תוכל לגשת לבדיקה בצד המארח עבור גרסת build מסוימת, צריך להגדיר את ההגדרה של מודול הבדיקה `test_suites` ל-`general-tests`:

test_suites: ["general-tests"],

בהגדרה הזו, הבדיקה נארזת ל-general-tests.zip ביעד test_suites.