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