Esta página explica como escrever um teste do lado do host que não exige um dispositivo, como um teste executado em uma instância do Linux GCE. Para saber mais sobre como criar um teste orientado pelo host que requer um dispositivo, consulte Criar um teste orientado pelo host na Trade Federation.
Tipos de teste do lado do host
É possível executar vários tipos de testes do lado do host pela Trade Federation (TF).
Testes nativos (gtest)
Crie testes nativos (gtests) para testar uma plataforma. Se o teste não exigir um dispositivo, execute-o em um host. Dessa forma, o teste será executado muito mais rápido. Para configurar esses testes para serem executados em um host de teste, use o executor de TF HostGTest.
Este é um exemplo de configuração de teste da TradeFed:
<configuration description="Runs hello_world_test."> <option name="null-device" value="true" /> <test class="com.android.tradefed.testtype.HostGTest" > <option name="module-name" value="hello_world_test" /> </test> </configuration>
A configuração do teste executa um teste gtest (hello_world_test) em um host. A configuração de teste de exemplo pode ser gerada automaticamente. A menos que o teste precise de uma configuração ou limpeza especial, você pode usar a geração automática de configurações de teste para criar configurações de teste adequadas do TF.
Para configurar um gtest do host e ativar a geração automática de configuração de teste, defina
host_supported
como true
em
Android.bp
, como em hello_world_test.
Para mais informações sobre como escrever um teste nativo, consulte Adicionar um novo exemplo de teste nativo.
Testes de host JAR
Os testes de host JAR (Java), como JUnit, são testes que não precisam ser executados em um dispositivo e que fornecem cobertura de código do projeto Java. Esses testes podem ser configurados para serem executados em um host de teste usando o HostTest do runner.
Exemplo de configuração de teste da TradeFed
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
A configuração do teste executa um teste JUnit do lado do host de HelloWorldHostTest. A configuração de teste acima pode ser gerada automaticamente. A menos que o teste precise de configuração ou limpeza especial, use a geração automática de configuração de teste para criar a configuração de teste correta da TradeFed.
Para mais detalhes sobre como escrever um teste de host JAR, consulte a página Testes de host JAR (Java).
Testes de host Java isolados
Os testes Java sem dispositivo podem ser executados em um ambiente isolado com um pequeno custo de desempenho. No entanto, há algumas considerações importantes a serem feitas antes de escolher usar esse ambiente.
- Esse é o executor padrão usado para testes de unidade do Robolectric e do JUnit.
- O Tradefed oferece suporte apenas a testes JUnit no ambiente de isolamento.
- Somente dependências vinculadas de forma estática são aceitas. Nenhuma dependência declarada
com
lib
é incluída no caminho de classe. - O executor de isolamento só coloca o shim runner e o jar de teste no classpath.
- Há uma quantidade fixa de sobrecarga por execução de teste executada com esse executor.
Exemplo de configuração de teste da Tradefed (isolado)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
Exemplo de configuração do Soong para a geração automática
Em vez de criar manualmente a configuração de teste como acima, o Soong pode gerar automaticamente a configuração usando uma declaração como este exemplo.
java_test_host { name: "HelloWorldHostTest", test_options: { unit_test: true, }, test_suites: ["general-tests"], srcs: ["test/**/*.java"], static_libs: [ "junit", ], }
Testes Robolectric
Os testes do Robolectric usam o mesmo executor dos testes de host isolados, com algumas opções especiais.
- A opção
robolectric-resources
permite que algumas opções de linha de comando específicas do Robolectric sejam transmitidas ao subprocesso e adiciona o build de árvore deandroid-all
ao caminho de classe do subprocesso. Enquanto as outras duas são práticas recomendadas, essa opção é obrigatória para executar testes Robolectric com sucesso. - A opção
java-folder
permite mudar o ambiente de execução Java usado pelo subprocesso. Isso é necessário porque o Robolectric prefere versões específicas do Java que podem não estar alinhadas com a JVM preferida do sistema host. - A opção
exclude-paths
permite que o executor de subprocesso evite carregar módulos específicos, o que é útil quando um JAR vem com classes estranhas que podem causar erros de carregamento.java.
é uma exclusão comum para evitar a geração de exceçõesSecurityException
.
Exemplo de configuração do Robolectric
<configuration description="Executes a Sample Robolectric Test"> <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" /> <option name="exclude-paths" value="java" /> <option name="use-robolectric-resources" value="true" /> <test class="com.android.tradefed.testtype.IsolatedHostTest"> <option name="jar" value="RobolectricExampleTest.jar" /> </test> </configuration>
Exemplo de configuração do Soong para a geração automática do Robolectric
Em vez de criar manualmente a configuração de teste como acima, o Soong pode gerar automaticamente a configuração usando uma declaração como este exemplo.
android_robolectric_test { name: "HelloWorldRoboTest", srcs: [ "src/**/*.java", ], // Include the testing libraries static_libs: [ "mockito-robolectric-prebuilt", "platform-test-annotations", "testng", "truth-prebuilt", ], instrumentation_for: "HelloWorldApp", }
Teste do Python
Se a lógica de teste for escrita em Python, use o tipo de build python_test_host
para criar um arquivo par que possa ser
executado pelo PythonBinaryHostTest
do TF.
Exemplo de configuração de teste da TradeFed
<configuration description="Config to run atest unittests"> <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" > <option name="par-file-name" value="atest_unittests" /> <option name="test-timeout" value="2m" /> </test> </configuration>
Configuração do pacote de testes
Para que o teste do host seja acessível pelo TF para um determinado build, defina a
configuração `test_suites`
do módulo de teste como
`general-tests`
:
test_suites: ["general-tests"],
Com essa configuração, o teste é empacotado para general-tests.zip
no
destino test_suites
.