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 תומך ב-tuples עבור בדיקות מותאמות ערך. כאשר בדיקת 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 , עם שני הבדלים:

  • הטיעון השלישי הוא אוסף של tuples (לעומת אוסף של מחרוזות במקרה הבסיסי).
  • השיטה להידור שם מבחן צריכה לתמוך tuple . אתה יכול להשתמש בשיטה המובנית PrintInstanceTupleNameToString , שיכולה להתמודד עם tuples של מחרוזות, כפי שמוצג בדוגמה למטה.
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<>);