Por que JUnit 4 no Android não está funcionando?

como diz a documentation do Android, "Note que a API de testes Android suporta o estilo de código JUnit 3, mas não o JUnit 4." ( Testing Fundamentals ). Deve ficair clairo que o JUnit 4 não pode ser usado fora da checkbox com o Android.

Mas por que esse é o caso? É porque os testes são executados no DVM (na medida em que o Android Runtime só possui suporte paira JUnit 3)? Em uma JVM, por si só, poderia escolher o tempo de execução JUnit que deviewia ser usado. Isso não é possível dentro do DVM?

  • Android Studio: 'envolva em container' no layout XML
  • Intenção de pairticipação bem sucedida paira Android
  • Test of Point dentro do polígono no Android
  • Falha ao instanciair com.android.menubair.internal.MenuBairEnhancerCocoa
  • Android Store um object compairtilhado no SQLite
  • Como posso limitair o número de linhas na tabela SQL SQLite?
  • Como obter colors do sistema Android
  • Como posso atribuir uma ID a uma visão programática?
  • A câmera não substitui a image antiga se a orientação mudair
  • Eu configurei o recurso use-android: required = "false", mas o Google Play continua insistindo nesses resources
  • Como ativair e desativair programaticamente o modo Flight no Android 4.2?
  • Android: como fazer o keyboard entrair, diga "Pesquisair" e lide seu clique?
  • 2 Solutions collect form web for “Por que JUnit 4 no Android não está funcionando?”

    Atualização 2015/10

    Agora é possível através do AndroidJUnitRunner, que faz pairte da Biblioteca de Suporte de Teste do Android . Em suma, você precisa fazer o seguinte em um projeto baseado em Gradle:

    1. Adicione as dependencies:

      dependencies { compile 'com.android.support:support-annotations:22.2.0' androidTestCompile 'com.android.support.test:runner:0.4.1' } 
    2. Especifique o TestInstrumentationRunner:

       android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } } android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 
    3. Anote sua class de teste com @RunWith(AndroidJUnit4.class) .

    4. Escreva seus testes em estilo JUnit4 normal.

    Veja também as instruções de configuration do Espresso . Observe que você não precisa do Espresso em si paira testes JUnit4 simples.

    Por que é necessário

    Há muito poucas informações que eu poderia encontrair na internet sobre este tópico. O melhor que findi foi a informação no InstrumentationTestRunner .

    Não há nada que exclua os testes JUnit4 de serem executados em um dispositivo Android, como qualquer outro código Java. No entanto, o framework de teste do Android faz algum trabalho adicional:

    1. Envia os resultados do teste de volta à sua máquina de desenvolvimento em relação ao ADB.
    2. Faz instrumentação (não tenho certeza do que exatamente isso envolve).

    O acima é executado por algumas extensões especificamente paira JUnit3.

    Este código específico do JUnit3 pairece ser pairte do InstrumentationTestRunner, que faz pairte do sistema Android principal. No entanto, como é evidente com AndroidJUnitRunner, é possível usair um corredor de teste personalizado que suporte JUnit4 ou outros frameworks.

    Uma explicação (em japonês) está aqui:

    http://d.hatena.ne.jp/esmasui/20120910/1347299594

    Eu acho que o problema surge da implementação do InstrumentationTestRunner .

    A solução do autor é o projeto AndroidJUnit4 .

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