O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Testes de Instrumentação

Primeiro leia Teste sua aplicação em developer.android.com. Observe que há algumas diferenças em como os testes de instrumentação são usados ​​no teste de plataforma.

Em resumo, um teste de instrumentação fornece um ambiente especial de execução de teste como iniciado pela am instrument de comando, onde o processo de aplicação alvo é reiniciado e inicializado com o contexto básico de aplicação, e um fio de instrumentação é iniciado dentro do processo de aplicação VM. Seu código de teste inicia a execução sobre este tópico instrumentação e é fornecido com um Instrumentation instância que fornece acesso ao contexto de aplicação e APIs para manipular o processo de aplicação em teste.

Conceitos chave

  • uma instrumentação deve ser declarado em um pacote de aplicativos, com um <instrumentation> tag aninhada sob o <manifest> tag do manifesto pacote de aplicativos.
  • um manifesto de pacote de aplicativos podem tecnicamente contêm múltiplos <instrumentation> tag, embora não seja comumente usado desta forma.
  • cada <instrumentation> deve conter:
    • um android:name atributo: deve ser o nome de uma subclasse de Instrumentation que está incluído na aplicação do teste, o qual é tipicamente o corredor de teste que está a ser usado, por exemplo: android.support.test.runner.AndroidJUnitRunner
    • um android:targetPackage atributo deve ser definido. Seu valor deve ser definido como o pacote do aplicativo em teste.

Resumo das etapas

  1. Abaixo estão destinos comuns para testes herméticos em serviços de estrutura:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Se você estiver adicionando um novo módulo de instrumentação para o seu componente, consulte

  2. Seguindo a convenção existente se você estiver adicionando testes em um dos locais acima. Se você estiver configurando um novo módulo de teste, siga a configuração do AndroidManifest.xml e Android.mk em um dos locais acima

  3. Ver estruturas / base / núcleo / testes / coretests / para um exemplo. Observe que estas linhas instalam aplicativos extras:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Não se esqueça de marcar o seu teste como @SmallTest , @MediumTest ou @LargeTest

  5. Construa o módulo de teste com m, por exemplo:

    m FrameworksCoreTests
    
  6. Execute os testes:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Se não estiver usando Tradefed, instale manualmente e execute os testes:

    1. Instale o apk gerado:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    Dica: você usa adb shell pm list instrumentation para encontrar as instrumentações dentro do apk acabou de instalar

    1. Execute os testes com várias opções:

      1. todos os testes no apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. todos os testes em um pacote Java específico

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. todos os testes em uma classe específica

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. um método de teste específico

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Seu teste pode fazer uma afirmação explícita sobre aprovação ou reprovação usando JUnit APIs; além disso, quaisquer exceções não detectadas também causarão uma falha funcional.

Para emitir métricas de desempenho, seu código de teste pode chamar Instrumentation#sendStatus a enviar uma lista de pares chave-valor. É importante observar que:

  1. métricas podem ser inteiras ou ponto flutuante
  2. quaisquer valores não numéricos serão descartados
  3. seu apk de teste pode ser tanto testes funcionais quanto testes de métricas, no entanto, misturar os dois não é compatível no momento