עבור ממשק 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);
הטיעונים הם:
InstantiationName
, שיכול להיות כל דבר שתואם את המבחן שלך.PerInstance
הוא שם נפוץ.שם כיתת המבחן.
אוסף של שמות מופעים, שניתן לאחזר מהשיטה המובנית, למשל,
getAllHalInstanceNames
.השיטה להדפסת שם שיטת הבדיקה.
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<>);