Obviamente, preciso da declaração de importação correta para resolver esse problema. De acordo com os documentos paraAndroidJUnit4
, isso deve ser
import android.support.test.runner.AndroidJUnit4;
Quando faço isso, o Android Studio destaca runner
em vermelho e reclama "Não é possível resolver o símbolo 'corredor'".
fundo
Cheguei a esse ponto seguindo os tutoriais no site Android Developer para configurar testes usando o UI Automator . O primeiro problema que encontrei foi isso com.android.support:support-v4:22.2.0
e com.android.support.test:runner:0.2
depende de diferentes versões do com.android.support:support-annotations
. Segui as sugestões deste relatório de bug do Android e adicionei o seguinte allprojects
no meu projeto build.gradle
:
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
Isso resolveu o erro imediato, mas suspeito que isso tenha causado meus problemas atuais. Alguém tem alguma sugestão sobre como corrigir isso?
Seções relevantes de `./gradlew: app: dependencies
androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-android:1.0.8
| \--- org.easytesting:fest-assert-core:2.0M10
| \--- org.easytesting:fest-util:1.2.5
+--- com.android.support.test:runner:0.2
| +--- junit:junit-dep:4.10
| | \--- org.hamcrest:hamcrest-core:1.1
| +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
| \--- com.android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.android.support.test:rules:0.2
| \--- com.android.support.test:runner:0.2 (*)
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:22.2.0
| \--- com.android.support:support-v4:22.2.0
| \--- com.android.support:support-annotations:22.2.0
+--- com.android.support:support-v4:22.2.0 (*)
+--- com.google.android.gms:play-services:6.1.71
| \--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2
fonte
com.android.support.test:runner
completamente. Você pode confirmar por meio degradle dependencies
que ainda está fazendo isso após aresolutionStrategy
alteração?(*)
significa depoiscom.android.support.test:runner:0.2
.Respostas:
Verifique se seu aplicativo na variante de compilação de depuração. Vá para Build> selecione Build Variant ... e o seguinte deve aparecer:
fonte
android { testBuildType "staging"}
debug
não funcionam a menos que explicitamente definido como "debug"Cometi o erro de colocar as classes de teste em src / test . Depois de movê-los para src / androidTest / java /, a dependência foi resolvida.
fonte
Ok, então aqui está o seu erro e o meu!
Se vamos escrever um pedaço de código para o teste de unidade local , não devemos usá-lo
@RunWith(AndroidJUnit4.class)
porque não usamos o AndroidJUnit4, mas precisamos do Junit4. então devemos escrever@RunWith(JUnit4.class)
. E é claro que seu arquivo de teste java está noapp/src/test/java/your.package.name
diretórioCaso contrário, se (!!) quisermos escrever algum Teste de Unidade Instrumentada Android , devemos colocar nossos arquivos java de teste no
app/src/androidTest/java/your.package.name
diretório e usar anotações como@RunWith(AndroidJUnit4.class)
fonte
Atualizar
A Biblioteca de teste do Android agora faz parte do AndroidX. Certifique-se de usar as dependências corretas de Gradle encontradas na documentação oficial .
Resposta original
Eu descobri aqui que existem versões mais recentes da Biblioteca de Suporte ao Teste do que o que eu estava usando:
Nota: Certifique-se de usar as versões mais recentes dessas bibliotecas. Esta pergunta é de uma época em que a Biblioteca de suporte a testes do Android era nova e os números de versão aqui estão muito desatualizados.
fonte
Resolvi o problema fazendo uma pequena alteração no arquivo build.gradle do aplicativo. Na
dependencies { ... }
seção, inclua a seguinte linha:ou qualquer versão mais recente nesse momento (
...Compile
foi descontinuada e foi substituída por...Implementation
). Observe o uso dedebugImplementation
. O Android Studio sugeriu incluí-lo automaticamente comandroidTestImplementation
, o que não funcionou.Eu descobri como alterá-lo de teste para depuração, procurando em Estrutura do projeto em Dependências do módulo de aplicativo, onde você pode alterar o escopo de cada dependência, veja abaixo.
fonte
Observe que este OP está agora em 2019, com 4 anos. Portanto, se você estiver usando o Android X,
AndroidJUnit4.class
está obsoleto, há um erro e mais um com esteandroidx.test.ext.junit.runners.AndroidJUnit4
. Sugiro ler esses links para resolver o problema.AndroidJUnit4.class está obsoleto: Como usar androidx.test.ext.junit.runners.AndroidJUnit4?
Migrando testes Junit4 para androidx: o que faz com que 'o delegado corredor não pôde ser carregado'? Para mim, o Android Studio sugeriu substituir
que foi preterido com
e isto
com isso
Depois que o erro se foi, mas eu não sei se o teste futuro enquanto estiver funcionando ok ?!
fonte
No meu caso, isso ajudou a variante de lançamento:
fonte
A causa comum desse problema é que, ao adicionar abaixo a dependência:
Essa é uma dependência correta se você for usar testes instrumentados (testes no
androidTest
pacote java)Mas para implementar testes de unidade local (testes no
test
pacote java) enquanto usa a dependência mencionada acima; então você vai enfrentarCannot resolve symbol 'AndroidJUnit4'
Isso é porque
androidTestImplementation
diretiva é usada para importar bibliotecas em testes instrumentados, mas não nos testes locais da JVM / unidade.Se você deseja usar
AndroidJUnit4
em um JVM local / teste de unidade, use a dependência abaixo em vez dissoO mesmo se aplica se você adicionar a última dependência ao usar
AndroidJUnit4
no teste instrumentado, você também receberáCannot resolve symbol 'AndroidJUnit4'
; porque você está usando a diretiva errada.fonte
Se alguém ainda tiver esse problema:
e usando a API 27, no
build.gradle
módulo que está no aplicativo, adicione as seguintes linhas:fonte
coloque esse código em suas dependências
fonte
Se você estiver usando um projeto com vários tipos de construção, o tipo de construção selecionado na janela variante de construção deverá ser mencionado com a tag testBuildType no arquivo build.gradle do módulo.
Por exemplo: se você estiver usando o tipo de compilação debug , deverá adicionar
android{testBuildType "debug" }
, se estiver usando stage , adicione aandroid{testBuildType "stage"}
instrução na tag android.fonte
Mova a classe de teste para src / androidTest / java /. Então a dependência será resolvida.
fonte
O clássico Invalidate Caches / Restart me ajudou! :)
fonte
Inclua esta dependência no seu arquivo build.gradle:
Atualize a versão final (
1.1.1
) com a versão mais recente lançada.fonte
Adicionando
resolveu esse problema exato para mim.
fonte
compile
diretivas dependem de nomes usados no aplicativo principal, enquantoandroidTestComiple
dependem de nomes usados para teste. Portanto, a resposta correta é usarandroidTestCompile
, nãocompile
.Como a lista de respostas demonstra, isso pode ser causado por algumas coisas. Mais um para a lista:
Executei um LINT excessivamente zeloso que removeu todas as importações não utilizadas. Isso produzirá os mesmos erros e é fácil esquecer que esse é o problema.
O Android-studio destacará as referências que estão faltando no código de teste - e o pop-up ALT-ENTER será exibido (esse é o ponto mais fácil de perder).
Em seguida, preciso remover os testes do LINT - ou pelo menos desativar esse aviso.
Edit: @ Code-Apprentice, as linhas que estavam faltando foram:
Portanto, o primeiro erro no arquivo ocorreu
@RunWith(AndroidJUnit4.class)
no início da minha classe de teste.fonte
Versão curta:
Estou respondendo a esta pergunta em 15 de fevereiro de 2020. Infelizmente, eu esgotei todas as soluções possíveis mencionadas aqui e em outros lugares.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: não é possível resolver o símbolo AndroidJUnit4.class
Não é possível resolver o símbolo AndroidJUnit4
Android Espresso: não é possível resolver o símbolo AndroidJUnit4.class
Sim, nenhum deles acima funciona. Eu uso a função interna "Migrar para Andoridx". Isso pode me lembrar que eu tenho que atualizar minhas versões de SDK de destino e minha versão gradle. Depois de atualizar minha versão gradle de 2.0.2 para 3.5.3. Eles simplesmente funcionam, até a antiga declaração de importação funciona.
fonte
O mesmo erro ocorreu quando eu sigo o aplicativo Google IOSched e configuro meu projeto com três tipos de compilação [depuração, liberação, teste] em que depuração e liberação compartilham o mesmo diretório de origem
Nesse caso, especifique o
testBuildType
arquivo build.gradle no nível do módulo e o projeto agora poderá resolver o símbolo 'AndroidJUnit4'.Referência: https://github.com/google/iosched/blob/master/mobile/build.gradle
fonte