Добавить новые 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 в make-файле.

#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. Подробности см. в разделе «Простая конфигурация теста» .

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

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

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

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

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

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