Bir HAL arayüzü için birden fazla uygulama olabilir. Her örneği bir HAL uygulaması için test etmenin standart yolu, değer parametreli bir gtest yazmaktır.
Temel test kurulumu
gtest, parametresi her örneğin adı olan testing::TestWithParam
temel sınıfını miras almalıdır. SetUp
yönteminde hizmet, aşağıdaki kod parçacığında gösterildiği gibi örnek adına göre başlatılabilir.
// 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);
...
}
Her test yöntemi için aşağıdaki örnekte gösterildiği gibi TEST_P
makrosunu kullanın.
TEST_P(UsbHidlTest, setCallback) {
...
}
Aşağıdaki örnekte gösterildiği gibi paketi INSTANTIATE_TEST_SUITE_P
makrosu ile oluşturun.
INSTANTIATE_TEST_SUITE_P(
PerInstance, UsbHidlTest,
testing::ValuesIn(android::hardware::getAllHalInstanceNames(IUsb::descriptor)),
android::hardware::PrintInstanceNameToString);
Argümanlar şunlardır:
InstantiationName
, testinizle eşleşen herhangi bir şey olabilir.PerInstance
yaygın bir addır.Test sınıfı adı.
Yerleşik yöntemden alınabilen örnek adlarından oluşan bir koleksiyon; örneğin
getAllHalInstanceNames
.Test yöntemi adını yazdırma yöntemi.
PrintInstanceNameToString
örnek adı ve test yöntemi adına göre bir test adı derlemek için kullanabileceğiniz yerleşik bir addır.
Birden fazla girişle test edin
gtest, değer parametreli testler için tanımlama gruplarını destekler. Bir HAL testi birden fazla girişle test yapılmasını gerektirdiğinde (örneğin, birden fazla arayüze sahip bir test), test parametresi olarak tuple
ile bir gtest yazabilirsiniz. Kodun tamamı VtsHalGraphicsMapperV2_1TargetTest
bulunabilir.
Tek test parametreli gtest ile karşılaştırıldığında, bu testin aşağıdaki örnekte gösterildiği gibi test parametresi olarak tuple
kullanması gerekir.
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())));
…
}
Daha karmaşık parametrelere ihtiyaç duyulursa bir yapı ve özel gtest ToString
işlevlerinin kullanılması önerilir.
Test paketini başlatmak için INSTANTIATE\_TEST\_CASE\_P
makrosu da iki farkla kullanılır:
- Üçüncü argüman bir tuple koleksiyonudur (temel durumda bir dizi koleksiyonuna karşılık).
- Test adını derleme yönteminin
tuple
desteklemesi gerekir. Aşağıdaki örnekte gösterildiği gibi dize dizilerini işleyebilenPrintInstanceTupleNameToString
yerleşik yöntemini kullanabilirsiniz.
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<>);