एचएएल इंटरफ़ेस के लिए, कई कार्यान्वयन हो सकते हैं। एचएएल कार्यान्वयन के लिए प्रत्येक उदाहरण का परीक्षण करने के लिए, मानक तरीका एक मान-पैरामीटरयुक्त 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 मूल्य-पैरामीटरयुक्त परीक्षणों के लिए टुपल्स का समर्थन करता है। जब एचएएल परीक्षण को कई इनपुट के साथ परीक्षण की आवश्यकता होती है (उदाहरण के लिए, कई इंटरफेस के साथ एक परीक्षण), तो आप परीक्षण पैरामीटर के रूप में tuple
के साथ एक gtest लिख सकते हैं। पूरा कोड 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<>);