HAL 테스트를 위한 매개변수화된 gtest

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);

주장은 다음과 같습니다.

  1. 테스트와 일치하는 모든 것이 될 수 있는 InstantiationName . PerInstance 는 일반적인 이름입니다.

  2. 테스트 클래스 이름입니다.

  3. 예를 들어 getAllHalInstanceNames 와 같이 기본 제공 메서드에서 검색할 수 있는 인스턴스 이름 모음입니다.

  4. 테스트 메서드 이름을 인쇄하는 메서드입니다. 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<>);