Добавить новые GoogleTests (GTests)

Если вы новичок в разработке для платформы Android, этот полный пример добавления совершенно нового двоичного файла GTest (иногда также называемого «родным» тестом) с нуля может оказаться полезным для демонстрации типичного рабочего процесса. Для получения дополнительной информации о фреймворке GTest для C++ обратитесь на сайт проекта GTest для получения дополнительной документации.

В этом руководстве в качестве примера используется Hello World GTest . Мы рекомендуем прочитать код, чтобы получить общее представление о нем, прежде чем продолжить.

Определите местоположение источника

Обычно ваша команда уже имеет установленный шаблон мест для проверки кода и мест для добавления тестов. Большинство команд владеют одним репозиторием git или делятся им с другими командами, но имеют выделенный подкаталог, содержащий исходный код компонента.

Если предположить, что корневое расположение исходного кода компонента находится в <component source root> , то у большинства компонентов есть папки src и tests , а также некоторые дополнительные файлы, такие как Android.mk (или разбитые на дополнительные файлы .bp ).

Поскольку вы добавляете совершенно новый тест, вам, вероятно, потребуется создать каталог tests рядом с компонентом src и заполнить его содержимым.

В некоторых случаях ваша команда может иметь дополнительные структуры каталогов в tests из-за необходимости упаковывать различные наборы тестов в отдельные двоичные файлы. И в этом случае вам нужно будет создать новый подкаталог в tests .

Для иллюстрации приведем типичную структуру каталога для компонентов с одной папкой tests :

\
 <component source root>
  \-- Android.bp (component makefile)
  \-- AndroidTest.xml (test config file)
  \-- src (component source)
  |    \-- foo.cpp
  |    \-- ...
  \-- tests (test source root)
      \-- Android.bp (test makefile)
      \-- src (test source)
          \-- foo_test.cpp
          \-- ...

а вот типичная структура каталогов для компонентов с несколькими исходными каталогами тестов:

\
 <component source root>
  \-- Android.bp (component makefile)
  \-- AndroidTest.xml (test config file)
  \-- src (component source)
  |    \-- foo.cpp
  |    \-- ...
  \-- tests (test source root)
      \-- Android.bp (test makefile)
      \-- testFoo (sub test source root)
      |   \-- Android.bp (sub test makefile)
      |   \-- src (sub test source)
      |       \-- test_foo.cpp
      |       \-- ...
      \-- testBar
      |   \-- Android.bp
      |   \-- src
      |       \-- test_bar.cpp
      |       \-- ...
      \-- ...

Независимо от структуры, вы в конечном итоге заполняете каталог tests или вновь созданный подкаталог файлами, похожими на те, что находятся в native каталоге в примере изменения gerrit. В разделах ниже будут даны более подробные пояснения по каждому файлу.

Исходный код

Пример см. в Hello World GTest .

Исходный код этого примера аннотирован здесь:

#include <gtest/gtest.h>

Включение заголовочного файла для GTest. Зависимость включаемого файла автоматически разрешается с помощью BUILD_NATIVE_TEST в makefile.

#include <stdio.h>

TEST(HelloWorldTest, PrintHelloWorld) {
    printf("Hello, World!");
}

GTests пишутся с использованием макроса TEST : первый параметр — имя тестового случая, второй — имя теста. Вместе с именем бинарного файла теста они образуют следующую иерархию на панели результатов:

<test binary 1>
| \-- <test case 1>
| |   \-- <test 1>
| |   \-- <test 2>
| |   \-- ...
| \-- <test case 2>
| |   \-- <test 1>
| |   \-- ...
| \-- ...
<test binary 2>
|
...

Более подробную информацию о написании тестов с помощью GTest можно найти в документации GTest .

Простой файл конфигурации

Каждый новый тестовый модуль должен иметь файл конфигурации для управления системой сборки с метаданными модуля, зависимостями времени компиляции и инструкциями по упаковке. В большинстве случаев достаточно опции файла Blueprint на основе Soong. Подробнее см. в разделе Simple Test Configuration .

Сложный файл конфигурации

Чтобы использовать Trade Federation, напишите тестовый файл конфигурации для тестового инструментария Android, Trade Federation .

Конфигурация теста может указывать специальные параметры настройки устройства и аргументы по умолчанию для предоставления тестового класса.

Сборка и тестирование локально

Для наиболее распространенных случаев использования используйте Atest .

В более сложных случаях, требующих более серьезной настройки, следуйте инструкциям по использованию приборов .