Esta página informa como escrever um teste do lado do host que não exija um dispositivo, como um teste executado em uma instância Linux GCE. (Para obter detalhes sobre como escrever um teste controlado por host que requer um dispositivo, consulte Escrever um teste controlado por host na Federação de Comércio .)
Tipos de teste do lado do host
Você pode executar vários tipos de testes do lado do host por meio da 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; o teste será executado muito mais rápido dessa maneira. 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 do 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 de 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 seu teste precise de uma configuração ou limpeza especial, você pode contar com a geração automática de configuração de teste para criar configurações de teste de TF adequadas.
Para configurar um gtest do lado 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 obter mais informações sobre como escrever um teste nativo, consulte Adicionando um novo exemplo de teste nativo .
testes de host JAR
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 de seu projeto Java. Esses testes podem ser configurados para serem executados em um host de teste usando o executor HostTest .
Exemplo de configuração de teste do TradeFed
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
A configuração de teste executa um teste JUnit do lado do host de HelloWorldHostTest . Observe que a configuração de teste acima pode ser gerada automaticamente. A menos que seu teste precise de configuração ou limpeza especial, conte com a geração automática de configuração de teste para criar uma configuração de teste TradeFed adequada.
Para obter 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 de isolamento com um pequeno custo de desempenho. No entanto, existem algumas considerações importantes a serem feitas antes de escolher usar esse ambiente.
- Este é o executor padrão usado para testes de unidade Robolectric e JUnit
- Tradefed suporta apenas testes JUnit no ambiente de isolamento.
- Somente dependências vinculadas estaticamente são suportadas. Nenhuma dependência declarada com
lib
está incluída no classpath. - O corredor de isolamento apenas coloca o corredor de correção e seu jar de teste no caminho de classe.
- Há alguma quantidade de sobrecarga fixa por execução de teste executada com este executor.
Exemplo de configuração de teste 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 Soong para geração automática
Em vez de criar manualmente a configuração de teste como acima , Soong pode autogerar 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 robolétricos
Os testes robolétricos usam o mesmo corredor que os testes de host isolado, com algumas opções especiais.
- A opção
robolectric-resources
permite que algumas opções de linha de comando específicas do Robolectric sejam passadas para o subprocesso, bem como adiciona a construção de árvore deandroid-all
ao caminho de classe do subprocesso. Embora as outras duas sejam práticas recomendadas, essa opção é obrigatória para executar testes Robolectric com sucesso. - A opção
java-folder
permite alterar o tempo de execução Java usado pelo subprocesso. Isso é necessário porque o Robolectric prefere versões Java específicas que podem não se alinhar com a JVM preferencial do sistema host. - A opção
exclude-paths
permite que o executor do 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 lançar 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 Soong para geração automática Robolectric
Em vez de criar manualmente a configuração de teste como acima , Soong pode autogerar 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 Python
Se a lógica de teste for escrita em Python, use o tipo de compilação python_test_host
para criar um arquivo par que possa ser executado por TF PythonBinaryHostTest
.
Exemplo de configuração de teste do 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 conjunto de teste
Para que o teste do lado do host seja acessível pelo TF para uma determinada compilação, defina a configuração do módulo de teste `test_suites`
como `general-tests`
:
test_suites: ["general-tests"],
Com essa configuração, o teste é empacotado em general-tests.zip
no destino test_suites
.