Pergunta

Estou escrevendo um projeto de biblioteca Android baseado na classe Android Bitmap (ligue para Androindlib), que contém apenas a classe utilitária (sem atividade). Tentei testá -lo usando Android Junit, mas continua reclamando que não consegue encontrar o anroidlib.apk

Qual é o caminho certo para o projeto de biblioteca Android de teste de unidade?

Foi útil?

Solução

Citando a documentação:

"Existem duas maneiras recomendadas de configurar testes em código e recursos em um projeto de biblioteca:

  • Você pode configurar um projeto de teste que instrumenta um projeto de aplicativo que depende do projeto da biblioteca. Você pode adicionar testes ao projeto para recursos específicos da biblioteca.

  • Você pode configurar um projeto de aplicativo padrão que depende da biblioteca e colocar a instrumentação nesse projeto. Isso permite criar um projeto independente que contenha os testes/instrumentações e o código para testar ".

Outras dicas

No seu projeto de teste, basta alterar o nome do pacote para que seja o mesmo que o pacote da sua biblioteca. Por exemplo, você tem uma biblioteca cujo pacote é "com.example.lib". Crie um projeto de teste direcionado à sua biblioteca. No arquivo manifesto que você verá package="com.example.lib.test", e targetPackage="com.example.lib". Basta alterar o pacote de "com.example.lib.test" para "com.example.lib" (targetPackage deixe como está).

Além disso, verifique se a biblioteca é referenciada ao seu projeto de teste NÃO no caminho de construção de java, mas como uma biblioteca Android usual: no eclipse, deve ser mostrado como biblioteca em Project->Properties->Android guia, mas não dentro Project->Properties->Java Build Path aba.

Em seguida, execute seus testes.

http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ ajuda a descrever o processo necessário para implementar a segunda sugestão na resposta do Commonsware

Por documentação:

Testar um módulo de biblioteca é o mesmo que testar um aplicativo. A principal diferença é que a biblioteca e suas dependências são automaticamente incluídas como dependências do APK de teste. Isso significa que o APK de teste inclui não apenas seu próprio código, mas também o AAR da biblioteca e todas as suas dependências. Como não existe "aplicativo em teste" separado, a tarefa Androidtest instala (e desinstala) apenas o APK de teste. Ao mesclar vários arquivos de manifesto, a GRADLE segue a ordem de prioridade padrão e mescla o manifesto da biblioteca no manifesto principal do APK de teste.

NOTA: Esta solução é baseada no uso do Eclipse Indigo (3.8.2) e pode ter que ser implementado um pouco diferente para outro IDE, embora os princípios básicos sejam os mesmos.

Eu tive problemas semelhantes e descobri que o seguinte sempre funciona:

(Nota: Essas instruções são para construir um novo grupo de projetos do zero. Se você já criou partes do grupo de projetos, pode ser necessário modificar seus projetos para que eles se conectem da mesma maneira.)

  1. Crie um novo projeto da Biblioteca Android, verificando a caixa de seleção "IS Library" durante a criação. (por exemplo, um projeto Android chamado "RemingtonandroidTools").
  2. Crie o projeto Android Library e verifique se ele criou um arquivo JAR na pasta BIN. (Por exemplo, um arquivo JAR chamado "RemingtonandroidTools.jar".)
  3. Crie um projeto Android vazio para testar o aplicativo Android que servirá como um aplicativo de teste Android. (Por exemplo, um projeto Android chamado "RemingtonandroidToolstestapp"). Você não precisará modificar o código -fonte ou os recursos do projeto Android Test App, a menos que tenha algo que deve ser adicionado para teste. Muitas coisas podem ser testadas sem modificações no projeto do aplicativo de teste Android. O projeto Android Test App é uma ponte entre o seu projeto de biblioteca Android e o projeto Android Junit que torna possível o teste do projeto da Biblioteca Android via Android Junit.
  4. Vá a guia Biblioteca do Java Build Path para o Android Test App Project ("RemingtonandroidToolstestapp" neste exemplo).
  5. Adicione o arquivo jar ("RemingtonandroidTools.jar" neste exemplo) do projeto Android Library ("RemingtonandroidTools" neste exemplo) através do botão "Adicionar frascos ...".
  6. Crie um novo projeto de teste Android (por exemplo, "RemingtonandroidToolstester") que servirá como testador de biblioteca Android e selecione o projeto Android Test App ("RemingtonandroidToolstestapp" neste exemplo) como o destino.
  7. Vá a guia Biblioteca do Java Build Path para o Projeto Android Library Tester ("RemingtonandroidToolstester" neste exemplo).
  8. Adicione o arquivo jar ("RemingtonandroidTools.jar" neste exemplo) do projeto Android Library ("RemingtonandroidTools" neste exemplo) através do botão "Adicionar frascos ...".
  9. Encontre a última pasta do seu pacote Android no projeto Android Library Tester ("Danny.remington.remington_android_tools_test_app.test" por exemplo) e adicione uma classe de teste ("mainActivityTest", por exemplo) que herda do ActivityInstrumationTestCase2.
  10. Edite a classe de teste ("TestactivityTest" neste exemplo) para usar a atividade (por exemplo "testatividade") do aplicativo de teste Android ("REMINGTONANDROIDTOOLSTESTAPP" neste exemplo) como o parâmetro para o ActivityInstrumationTestcase2.
  11. Edite a classe de teste ("TestactivityTest" neste exemplo) e crie um construtor padrão que faça uma chamada para super (classe) e a passagem na classe do aplicativo de teste Android ("testatividade.class", por exemplo).

Você deve acabar com três projetos (Android Library, Android Test App, Android Library Tester) que se parecem com isso:

enter image description here

enter image description here

enter image description here

Você deve acabar com uma aula para testar sua biblioteca Android que se parece com isso:

package danny.remington.remington_android_tools_test_app.test;

import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

Você pode adicionar qualquer teste que desejar. Você não precisará fazer referência ao aplicativo de teste Android ("RemingtonandroidToolstestApp" neste exemplo) para executar seus testes, a menos que eles exijam acesso a um componente específico do Android (como a pasta de ativos, por exemplo). Se você precisar acessar qualquer componente específico do Android, poderá fazê -lo modificando o aplicativo de teste Android ("RemingtonandroidToolstestapp" neste exemplo) e, em seguida, referencia -o através da instrumentação fornecida pela API Android Junit padrão. (Você pode ler mais sobre isso aqui: http://developer.android.com/tools/testing/testing_android.html)

Se suas classes Ulitiy não dependerem de nenhum código específico do Android, basta usar testes de unidade JUNIT padrão. Não há necessidade de usar as versões Android.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top