از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
GTest پارامتری برای تست HAL، GTest پارامتری برای تست HAL، GTest پارامتری برای تست HAL، 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);
استدلال ها عبارتند از:
InstantiationName
، که می تواند هر چیزی باشد که با آزمون شما مطابقت داشته باشد. PerInstance
یک نام رایج است.
نام کلاس آزمون
مجموعهای از نامهای نمونه، که میتوانند از روش داخلی بازیابی شوند، به عنوان مثال، getAllHalInstanceNames
.
روش چاپ نام روش تست. 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<>);
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Parameterized GTest for HAL testing\n\nFor a HAL interface, there might be multiple implementations. To test each\ninstance for a HAL implementation, the standard way is to write\na [value-parameterized GTest](https://github.com/google/googletest/blob/main/docs/advanced.md#value-parameterized-tests).\n\nBasic test setup\n----------------\n\nThe GTest must inherit the base class `testing::TestWithParam`, of\nwhich the parameter is the name of each instance. In the\n`SetUp` method, the service can be instantiated based on the\ninstance name, as shown in the following code snippet. \n\n // The main test class for the USB hidl HAL\n class UsbHidlTest : public testing::TestWithParam\u003cstd::string\u003e {\n\n virtual void SetUp() override {\n usb = IUsb::getService(GetParam());\n ASSERT_NE(usb, nullptr);\n ...\n }\n\nFor each test method, use the macro `TEST_P` as shown in the following example: \n\n TEST_P(UsbHidlTest, setCallback) {\n ...\n }\n\nInstantiate the suite with\nmacro `INSTANTIATE_TEST_SUITE_P`, as shown in the following example: \n\n INSTANTIATE_TEST_SUITE_P(\n PerInstance, UsbHidlTest,\n testing::ValuesIn(android::hardware::getAllHalInstanceNames(IUsb::descriptor)),\n android::hardware::PrintInstanceNameToString);\n\nThe arguments are:\n\n1. `InstantiationName`, which can be anything that\n matches your test. `PerInstance` is a common name.\n\n2. The test class name.\n\n3. A collection of instance names, which can\n be retrieved from the built-in method, for example,\n `getAllHalInstanceNames`.\n\n4. The method to print the test method name.\n `PrintInstanceNameToString` is a built-in name you can use to\n compile a test name based on the instance name and test method name.\n\nTest with multiple inputs\n-------------------------\n\nGTest supports tuples for value-parameterized tests. When a\nHAL test requires testing with multiple inputs (for example, a test with\nmultiple interfaces), you can write a GTest with `tuple` as the\ntest parameter. The complete\ncode can be found in [`VtsHalGraphicsMapperV2_1TargetTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/graphics/mapper/2.1/vts/functional/VtsHalGraphicsMapperV2_1TargetTest.cpp).\n\nCompared to the GTest with a single test parameter, this test needs to use\n`tuple` as the test parameter as shown in the following example: \n\n class GraphicsMapperHidlTest\n : public ::testing::TestWithParam\u003cstd::tuple\u003cstd::string, std::string\u003e\u003e {\n protected:\n void SetUp() override {\n ASSERT_NO_FATAL_FAILURE(mGralloc = std::make_unique\u003cGralloc\u003e(std::get\u003c0\u003e(GetParam()),\n std::get\u003c1\u003e(GetParam())));\n ...\n }\n\nIf more complicated parameters are needed, it's recommended to use a\nstructure and custom GTest `ToString` functions.\n\nTo instantiate the test suite, the macro `INSTANTIATE\\_TEST\\_CASE\\_P` is also\nused, with two differences:\n\n- The third argument is a collection of tuples (versus a collection of strings in the basic case).\n- The method to compile a test name needs to support `tuple`. You can use the built-in method `PrintInstanceTupleNameToString`, which can handle tuples of strings, as shown in the following example:\n\n INSTANTIATE_TEST_CASE_P(\n PerInstance, GraphicsMapperHidlTest,\n testing::Combine(\n testing::ValuesIn(\n android::hardware::getAllHalInstanceNames(IAllocator::descriptor)),\n testing::ValuesIn(android::hardware::getAllHalInstanceNames(IMapper::descriptor))),\n android::hardware::PrintInstanceTupleNameToString\u003c\u003e);"]]