Si es la primera vez que desarrollas para la plataforma de Android, es posible que este ejemplo completo de cómo agregar un nuevo objeto binario de GTest (también llamado a veces una prueba "nativa") desde cero te resulte útil para demostrar el flujo de trabajo típico que implica. Para obtener información adicional sobre el framework de GTest para C++, consulta el sitio del proyecto de GTest para obtener documentación adicional.
En esta guía, se usa Hello World GTest como ejemplo. Te recomendamos que leas el código para obtener una idea aproximada antes de continuar.
Elige una ubicación de origen
Por lo general, tu equipo ya tendrá un patrón establecido de lugares para verificar el código y lugares para agregar pruebas. La mayoría de los equipos poseen un solo repositorio de git o comparten uno con otros equipos, pero tienen un subdirectorio dedicado que contiene el código fuente del componente.
Si suponemos que la ubicación raíz de la fuente de tu componente está en <component source
root>
, la mayoría de los componentes tienen carpetas src
y tests
debajo de ella, y algunos archivos adicionales, como Android.mk
(o divididos en archivos .bp
adicionales).
Como agregarás una prueba nueva, es probable que debas crear el directorio tests
junto a tu componente src
y propagarlo con contenido.
En algunos casos, tu equipo puede tener estructuras de directorios adicionales en tests
debido a la necesidad de empaquetar diferentes conjuntos de pruebas en objetos binarios individuales.
En este caso, deberás crear un subdirectorio nuevo en tests
.
A modo de ejemplo, este es un esquema de directorio típico para componentes con una sola carpeta 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
\-- ...
Este es un esquema de directorio típico para componentes con varios directorios de código fuente de prueba:
\
<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
| \-- ...
\-- ...
Independientemente de la estructura, terminarás poblando el directorio tests
o el subdirectorio creado recientemente con archivos similares a los del directorio native
en el cambio de gerrit de muestra. En las siguientes secciones, se explicarán con más detalle cada archivo.
Código fuente
Consulta GTest de Hello World para ver un ejemplo.
El código fuente de ese ejemplo está anotado aquí:
#include <gtest/gtest.h>
Archivo de encabezado incluido para GTest. La dependencia del archivo de inclusión se resuelve automáticamente usando BUILD_NATIVE_TEST
en el archivo make.
#include <stdio.h>
TEST(HelloWorldTest, PrintHelloWorld) {
printf("Hello, World!");
}
Los GTests se escriben con la macro TEST
: el primer parámetro es el nombre del caso de prueba y el segundo es el nombre de la prueba. Junto con el nombre del binario de prueba, forman la
siguiente jerarquía en el panel de resultados:
<test binary 1>
| \-- <test case 1>
| | \-- <test 1>
| | \-- <test 2>
| | \-- ...
| \-- <test case 2>
| | \-- <test 1>
| | \-- ...
| \-- ...
<test binary 2>
|
...
Para obtener más información sobre cómo escribir pruebas con GTest, consulta la documentación de GTest.
Archivo de configuración simple
Cada módulo de prueba nuevo debe tener un archivo de configuración para dirigir el sistema de compilación con metadatos del módulo, instrucciones de empaquetado y dependencias del tiempo de compilación. En la mayoría de los casos, la opción de archivo Blueprint basado en Soong es suficiente. Consulta Configuración de prueba simple para obtener más detalles.
Archivo de configuración complejo
Para usar Trade Federation, escribe un archivo de configuración de prueba para el conjunto de pruebas de Android, Trade Federation.
La configuración de prueba puede especificar opciones de configuración de dispositivos especiales y argumentos predeterminada para proporcionar la clase de prueba.
Compila y prueba de manera local
Para los casos de uso más comunes, emplea Atest.
Para casos más complejos que requieran una personalización más pesada, sigue las instrucciones de instrumentación.