HAL arayüzü için birden fazla uygulama olabilir. HAL uygulamasının her örneğini test etmek için standart yöntem, değer parametreli bir GTest yazmaktır.
Temel test kurulumu
GTest, her bir örneğin adını parametre olarak içeren testing::TestWithParam
temel sınıfını devralmalıdır. SetUp
yönteminde hizmet, aşağıdaki kod snippet'inde gösterildiği gibi örnek adına göre örneklenebilir.
// 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) {
...
}
Paketi aşağıdaki örnekte gösterildiği gibi INSTANTIATE_TEST_SUITE_P
makrosuyla örneklendirin:
INSTANTIATE_TEST_SUITE_P(
PerInstance, UsbHidlTest,
testing::ValuesIn(android::hardware::getAllHalInstanceNames(IUsb::descriptor)),
android::hardware::PrintInstanceNameToString);
Bağımsız değişkenler şunlardır:
InstantiationName
, testinizle eşleşen herhangi bir şey olabilir.PerInstance
yaygın bir addır.Test sınıfının adı.
Yerleşik yöntemden alınabilen örnek adları koleksiyonu (ör.
getAllHalInstanceNames
).Test yöntemi adını yazdırma yöntemi.
PrintInstanceNameToString
, örnek adına 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 etme
GTest, değer parametreli testler için tuple'leri destekler. Bir HAL testinin birden fazla girişle test edilmesi gerektiğinde (ör. birden fazla arayüz içeren bir test), test parametresi olarak tuple
içeren bir GTest yazabilirsiniz. Kodun tamamını VtsHalGraphicsMapperV2_1TargetTest
adresinde bulabilirsiniz.
Tek bir test parametresi içeren GTest'e kıyasla 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ç duyuluyorsa yapı ve özel GTest ToString
işlevleri kullanılması önerilir.
Test paketini örneklendirmek için INSTANTIATE\_TEST\_CASE\_P
makrosu da iki farklılık olmakla birlikte kullanılır:
- Üçüncü bağımsız değişken, temel durumdaki dize koleksiyonunun aksine bir tuple koleksiyonudur.
- Test adı derleme yönteminin
tuple
öğesini desteklemesi gerekir. Aşağıdaki örnekte gösterildiği gibi dize gruplarını işleyebilen yerleşikPrintInstanceTupleNameToString
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<>);