GTest עם פרמטרים לבדיקת HAL

ממשק HAL עשוי לכלול מספר הטמעות. כדי לבדוק כל מופע של הטמעת HAL, הדרך הרגילה היא לכתוב GTest עם פרמטרים של ערכים.

הגדרה בסיסית של בדיקה

מחלקת GTest חייבת לרשת את מחלקת הבסיס testing::TestWithParam, שבה הפרמטר הוא שם כל מכונה. ב השיטה SetUp, אפשר ליצור את השירות על סמך שם המכונה, כפי שמוצג בקטע הקוד הבא.

// The main test class for the USB hidl HAL
class UsbHidlTest : public testing::TestWithParam<std::string> {

 virtual void SetUp() override {
   usb = IUsb::getService(GetParam());
   ASSERT_NE(usb, nullptr);
...
 }

לכל שיטת בדיקה, משתמשים במאקרו TEST_P כפי שמוצג בדוגמה הבאה:

TEST_P(UsbHidlTest, setCallback) {
...
}

יוצרים את החבילה באמצעות המאקרו INSTANTIATE_TEST_SUITE_P, כפי שמוצג בדוגמה הבאה:

INSTANTIATE_TEST_SUITE_P(
       PerInstance, UsbHidlTest,
       testing::ValuesIn(android::hardware::getAllHalInstanceNames(IUsb::descriptor)),
       android::hardware::PrintInstanceNameToString);

הארגומנטים הם:

  1. InstantiationName, שיכול להיות כל דבר שמתאים לבדיקה. PerInstance הוא שם נפוץ.

  2. שם כיתת הבדיקה.

  3. אוסף של שמות של מופעים, שאפשר לאחזר מהשיטה המובנית, למשל getAllHalInstanceNames.

  4. השיטה להדפסת שם שיטת הבדיקה. PrintInstanceNameToString הוא שם מובנה שאפשר להשתמש בו כדי לכתוב שם בדיקה על סמך שם המכונה ושם שיטת הבדיקה.

בדיקה עם מספר סוגי קלט

GTest תומך בתווים לבדיקות לפי מימד ערך. כאשר בדיקת HAL מחייבת בדיקה עם כמה קלטים (לדוגמה, בדיקה עם מספר ממשקים), ניתן לכתוב GTest עם tuple פרמטר הבדיקה. כל אפשר למצוא את הקוד ב-VtsHalGraphicsMapperV2_1TargetTest.

בהשוואה ל-GTest עם פרמטר בדיקה יחיד, הבדיקה הזו צריכה להשתמש tuple כפרמטר הבדיקה כפי שמוצג בדוגמה הבאה:

class GraphicsMapperHidlTest
   : public ::testing::TestWithParam<std::tuple<std::string, std::string>> {
 protected:
   void SetUp() override {
       ASSERT_NO_FATAL_FAILURE(mGralloc = std::make_unique<Gralloc>(std::get<0>(GetParam()),
                                                                    std::get<1>(GetParam())));

}

אם יש צורך בפרמטרים מורכבים יותר, מומלץ להשתמש ופונקציות GTest ToString בהתאמה אישית.

כדי ליצור מופע של חבילת הבדיקות, משתמשים גם במאקרו INSTANTIATE\_TEST\_CASE\_P, עם שני הבדלים:

  • הארגומנט השלישי הוא אוסף של זוגות (לעומת אוסף מחרוזות בדוגמה הבסיסית).
  • השיטה ליצירת קובץ הידור של שם הבדיקה צריכה לתמוך ב-tuple. אפשר להשתמש השיטה המובנית PrintInstanceTupleNameToString, שיכולה טיפול במחרוזות כפולות, כמו בדוגמה הבאה:
INSTANTIATE_TEST_CASE_P(
       PerInstance, GraphicsMapperHidlTest,
       testing::Combine(
               testing::ValuesIn(
                       android::hardware::getAllHalInstanceNames(IAllocator::descriptor)),
           testing::ValuesIn(android::hardware::getAllHalInstanceNames(IMapper::descriptor))),
       android::hardware::PrintInstanceTupleNameToString<>);