Teste JUnit Android não-API simples no Eclipse com o android-maven-plugin?
Eu executo testes não-Android JUnit de dentro do Eclipse todos os dias. Hoje eu quis testar algumas das minhas aulas de biblioteca do Android. Oh, a dor
Eu tenho um projeto de biblioteca Android usando o Android-maven-plugin. Eu tenho arquivos fonte emsrc/main/java
e meu (novo) teste de unidade emsrc/test/java
. Meu POM tem as dependências apropriadas do JUnit e as referências do plugin do android-maven.
Às vezes eu crio um AndroidUri
instância de umFile
. Às vezes eu tenho um Java existenteURI
instância que eu criei de umFile
que eu então converter para umUri
. Desde que eu confio nem Java nem Android com arquivos e URIs (não me fale sobre como o Java manipula caminhos UNC em URIs, ou como o Java quebra oequals()
contrato em URIs), eu queria criar um teste de unidade simples para criar um arquivo temporário, criarUris
de duas abordagens diferentes e certifique-se de que elas saiam iguais.
Então eu faço um pequeno teste unitário JUnit como estou acostumado, e tento rodá-lo no Eclipse usandoCtrl+F11
. O Eclipse me pergunta se esse é um "Teste Android JUnit" ou um "Teste JUnit". Bem, Android, obviamente. Então escolho a primeira opção e obtenho:
[2013-03-23 21:37:10 - mylib] ------------------------------
[2013-03-23 21:37:10 - mylib] Android Launch!
[2013-03-23 21:37:10 - mylib] adb is running normally.
[2013-03-23 21:37:10 - mylib] Could not find mylib.apk!
Hmmm ... isso não foi muito bem sucedido. Então eu apago a configuração de execução e tento apenas "Teste JUnit". Agora eu recebo uma caixa de diálogo diferente, pedindo-me para selecionar o meu lançador preferido, ou "Lançador de Teste Android JUnit" ou "Lançador de Teste Eclipse JUnit". Não importa qual eu escolha; Eu recebo:
Class not found com.example.MyUnitTest
java.lang.ClassNotFoundException: com.example.MyUnitTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Eu li que com o plugin android-maven eu posso executar testes de unidade localmente no Eclipse se eles apenas usam classes no jar do Android, mas não fazem chamadas de API, que é o que estou fazendo aqui. Então, como eu faço isso?