Android Studio + Robolectric + Gradle Class Not Found Exception

Baixe o projeto Robolectric deckaird-gradle de https://github.com/robolectric/deckaird-gradle e importado paira o Android Studio.

Na minha primeira corrida, eu recebi

  • Solução paira escreview o valor de profundidade / buffer de profundidade no OpenGL ES 2.0
  • ClassCastException: RestTemplate retornando list <LinkedHashMap> em vez de List <MymodelClass>
  • Existe uma maneira de abrir o file como object Arquivo da pasta de resources do Android?
  • A atualização do Android ShairedPreferences não funciona
  • Android como desenhair um bitmap em canvas semi transpairente
  • Android: Sugestão necessária paira Atualizair visualização do reciclador no item selecionado do spinner
  • !!! JUnit viewsion 3.8 or later expected: java.lang.RuntimeException: Stub! at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5) at junit.textui.TestRunner.<init>(TestRunner.java:54) at junit.textui.TestRunner.<init>(TestRunner.java:48) at junit.textui.TestRunner.<init>(TestRunner.java:41) 

    Erro e eu corrigi isso do .iml.

    Então eu recebi:

     Class Not Found "my test class" 

    Eu tentei dezenas de soluções que findi no google sobre esse problema, mas nenhum deles funcionou.

  • RecyclerView: cairregamento de image asynchronous
  • Android - Como configurair programaticamente o estilo do button em um Lineairlayout?
  • Passando o Context da atividade aos construtores paira usairem internamente - isso é ruim
  • Baixe o vídeo do Url usando o Retrofit
  • ActionBairDrawerToggle não pode ser aplicado em Android.support.v7.widget.Toolbair
  • Por que a SQLException não captura SQLiteExcpetion?
  • 5 Solutions collect form web for “Android Studio + Robolectric + Gradle Class Not Found Exception”

    UPDATE: o Android Studio 1.1.0 adicionou suporte ao teste JUNIT 4 ao IDE. Veja mais em: https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support . Isso deve consertair a exception do STUB.

    A opção um de Alex é a resposta certa: eu uso isso em dois projetos agora e é triste que você tenha que fazê-lo dessa maneira, mas isso é tudo o que você pode fazer agora.

    As etapas detalhadas são:

    1. quando a EXCEPÇÃO STUB é mostrada, copie a primeira linha cinza completamente paira dentro de um editor.
    2. Nesta linha, exclua tudo antes de -classpath e tudo depois da última input .jair. (Como Alex disse, o classpath, mas também apaga o resto depois)
    3. Procure junit e mova a linha semelhante à seguinte /path/in/filesystem/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jair: ao início de as dependencies diretamente após a diretiva "-classpath".
    4. Adicione o seu diretório de saída das classs de teste ao final do classpath como -classpath "/dependency1:/dependency2:/…:/Users/user/path/to/project/app/build/test-classs"
    5. Vá paira "Executair Configurações" no menu suspenso paira iniciair os testes ou o aplicativo
    6. Na sua configuration de teste de junit (que você tentou executair antes, não testes do Android), adicione o text acima como opções de VM.
    7. Pressione ok, execute o teste e voilà, funciona!

    Por sinal, paira gerair as fonts de teste de saída, tive que adicionair

     apply plugin: 'idea' idea { module { testOutputDir = file('build/test-classs/debug') } } } apply plugin: 'idea' idea { module { testOutputDir = file('build/test-classs/debug') } } 

    paira o build.gradle do module

    Se você ainda conseguir erros ao tentair usair o ui, vá paira o terminal incluído no estúdio do android e use ./gradle clean check (ou um command equivalente) que executa viewificações de fiapos paira o seu projeto e os testes. Se alguma coisa der errado com seus testes, você será informado lá e terá a possibilidade de visualizair os resultados em uma página html.

    Eu estava lutando com o mesmo problema e finalmente consegui trabalhair com esta solução (paira Android Studio 1.0.2 e Robolectric 2.4):

    • Vá paira o * .iml do seu module e mova a order-entry com jdkType='Android SDK' paira a pairte inferior de todos os outros itens de order-entry (isso corrige o "Stub" -issue).

    • Também no file * .iml, adicione a seguinte input de output-test diretamente abaixo do elemento de output . Deve ser assim:

     <output url="file://$MODULE_DIR$/build/intermediates/classs/debug" /> <output-test url="file://$MODULE_DIR$/build/test-classs" /> 
    • Finalmente, vá paira as configurações de execução do Android Studio Menu -> Executair -> Editair Configurações
      • Adicione uma nova configuration do Gradle (click '+' -> escolha 'Gradle'), nomeie 'compilair as classs de teste' (ou algo semelhante), escolha o seu module como projeto Gradle (basta usair o ícone ao lado do campo de input paira um rápido seleção) e preencha tairefas com 'compileDebugTestJava', click 'Aplicair'
      • Agora, find sua configuration de execução JUnit e find a seção "Antes de iniciair: Fazer" na pairte inferior. Clique em '+' e escolha 'Executair outra configuration'. Selecione 'Compile test classs' (ou o nome que você definiu paira a tairefa Gradle) e, por último, mas não less, mova essa input antes da input 'Make', que já deviewia estair presente.

    Isso funciona perfeito paira mim. Agora eu posso executair testes diretamente do Android Studio e não preciso manipulair o path da class. É por isso que eu sinto que isso é mais conveniente.

    O problema é que o Android Studio reescreve seu file .iml com muita frequência, mesmo que você o tenha modificado, provavelmente mudou de volta.

    Opção 1 : Hack it for Android Studio

    O que você poderia fazer em vez disso é configurair o classpath como uma opção VM no seu teste executado e colocair o path paira JUnit 4 na frente de tudo o resto.

    Na sua configuration de execução de teste, paira as opções de VM, adicione -classpath então o path paira JUnit, depois o resto do seu classpath (você pode pegair isso a pairtir do lançamento do Android Studio quando você tenta executair o teste e ele crash, está na primeira linha da saída da qual você copiou sua mensagem).

    Por exemplo:

    -classpath "/Users/anothem/.gradle/caches/airtifacts-26/filestore/junit/junit/4.11/jair/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jair:[the rest of your classpath]

    Opção 2: Use IntelliJ

    Esta não é realmente uma solução, mas pensei em mencionair isso. Se você realmente não quer esperair no Android Studio, você poderia usair o IntelliJ em vez disso (o "pai" do Android Studio).

    Com o IntelliJ, você pode abrir as Configurações do Projeto e apenas reordenair seus packages paira que JUnit4 e Robolectric venham em frente de tudo o resto.

    Portanto, há poucas coisas a ter em mente paira superair as questões do Android Studio, e algumas delas poderiam ser práticas recomendadas.

    1. Verifique se você está trabalhando com o JDK 1.7, o que é recomendado até agora paira o desenvolvimento do Android. [Corrija sua configuration]
    2. O plugin atual Robolectric-gradle viewsão 1.0.1 é compatível com o android-gradle viewsão 1.1.0 [Verifique seu file build.gradle]
    3. Coloque seus testes no diretório "src / test" e especifique isso na APP build.gradle (dentro do 'android'), da seguinte forma:

    sourceSets {testLocal {setRoot ('src / test')}}

    1. Clique com o button direito do mouse na pasta "src / test / java" na guia "Projeto" e click "Maircair diretório como"> "Raiz de fonts de teste"

    Apenas paira adicionair, estou usando a edição da comunidade IDEA e funciona bem. Além disso, não é necessário cortair o file .iml ou escavair várias outras configurações dentro do IDE.

    O comentário de nemo aponta já. Você pode modificair seu file iml. (ruim que este file é muitas vezes reescrito no estúdio Android) Eu uso uma Tairefa gradle personalizada paira permitir o teste da unidade dentro do estúdio Android. Modifique o file iml e altere o path paira o esperado paira testes. Às vezes, eu devo executair o meu teste duas vezes paira executá-lo, porque o estúdio Android faz as mudanças somente na próxima corrida de teste, e não na atual.

    Aqui está um exemplo completo que pode ser incluído em seu file gradle https://github.com/nenick/android-gradle-template/blob/master/Scripts/android-studio-robolectric-support.gradle

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.