Per un'interfaccia HAL, potrebbero esserci più implementazioni. Per testare ogni per un'implementazione HAL, il metodo standard è scrivere un gtest con parametri di valore.
Configurazione del test di base
Il test gtest deve ereditare la classe base testing::TestWithParam
, di
in cui il parametro è il nome di ogni istanza. Nella
SetUp
, è possibile creare un'istanza del servizio in base al
di un'istanza, come mostrato nello snippet di codice riportato di seguito.
// 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);
...
}
Per ogni metodo di test, utilizza la macro TEST_P
come mostrato nell'esempio riportato di seguito.
TEST_P(UsbHidlTest, setCallback) {
...
}
Crea un'istanza della suite con
INSTANTIATE_TEST_SUITE_P
, come mostrato nell'esempio riportato di seguito.
INSTANTIATE_TEST_SUITE_P(
PerInstance, UsbHidlTest,
testing::ValuesIn(android::hardware::getAllHalInstanceNames(IUsb::descriptor)),
android::hardware::PrintInstanceNameToString);
Gli argomenti sono:
InstantiationName
, che può essere qualsiasi cosa corrisponde al test.PerInstance
è un nome comune.Il nome della classe di test.
Una raccolta di nomi di istanze, che può essere recuperata dal metodo integrato, ad esempio
getAllHalInstanceNames
.Il metodo per stampare il nome del metodo di test.
PrintInstanceNameToString
è un nome integrato che puoi utilizzare per Compila un nome di test basato sul nome dell'istanza e sul nome del metodo di test.
Esegui test con più input
gtest supporta le tuple per i test con parametri di valore. Quando
Il test HAL richiede il test con più input (ad esempio, un test con
più interfacce), puoi scrivere un gtest con tuple
come
parametro di test. L'intero
disponibile in VtsHalGraphicsMapperV2_1TargetTest
.
Rispetto a gtest con un singolo parametro di test, questo test deve utilizzare
tuple
come parametro di test, come mostrato nell'esempio riportato di seguito.
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())));
…
}
Se sono necessari parametri più complicati, ti consigliamo di utilizzare un parametro
struttura e funzioni gtest ToString
personalizzate.
Per creare un'istanza della suite di test, anche la macro INSTANTIATE\_TEST\_CASE\_P
viene
dei dati, con due differenze:
- Il terzo argomento è una raccolta di tuple (anziché una raccolta di stringhe nel caso di base).
- Il metodo per compilare un nome di test deve supportare
tuple
. Puoi utilizzare la modalità il metodo integratoPrintInstanceTupleNameToString
, che può per gestire tuple di stringhe, come mostrato nell'esempio seguente.
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<>);