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 테스트에 여러 입력으로 테스트해야 하는 경우(예: 여러 인터페이스가 있는 테스트) 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<>);