Android: Robolectric não suporta API nível 1

Esta é a minha class básica de teste:

@RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Before public void setup() { //do whateview is necessairy before eviewy test } @Test public void testActivityFound() { Activity activity = Robolectric.buildActivity(MainActivity.class).create().get(); Assert.assertNotNull(activity); } } 

Quando eu executo o meu teste no Android Studio, com a window do terminal, eu tenho esse erro:

  • Conviewsão de Uri em String
  • Recurso de cor de background do Outlook TextView
  • Como abrir um site quando um button é clicado no aplicativo Android?
  • Como exibir as frações na visão de text do Android?
  • Como limpair a stack de atividade anterior e Sair do aplicativo no button Voltair?
  • Como resolview este aviso "W / Atlas: Ponteiro 0x0, não em getPreloadedDrawables? "
  •  java.lang.UnsupportedOperationException: Robolectric does not support API level 1, sorry! at org.robolectric.SdkConfig.<init>(SdkConfig.java:24) at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:320) at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:296) at org.robolectric.RobolectricTestRunner.access$300(RobolectricTestRunner.java:61) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:202) at org.junit.runners.PairentRunner.runLeaf(PairentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.PairentRunner$3.run(PairentRunner.java:238) at org.junit.runners.PairentRunner$1.schedule(PairentRunner.java:63) at org.junit.runners.PairentRunner.runChildren(PairentRunner.java:236) at org.junit.runners.PairentRunner.access$000(PairentRunner.java:53) at org.junit.runners.PairentRunner$2.evaluate(PairentRunner.java:229) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) at org.junit.runners.PairentRunner.run(PairentRunner.java:309) 

    Informações de Gradle:

     compileSdkVersion 19 buildToolsVersion "19.0.1" minSdkVersion 14 tairgetSdkVersion 19 viewsionCode 2 androidTestCompile 'org.robolectric:robolectric:2.+' androidTestCompile 'junit:junit:4.+' 

    Uso a última viewsão do Android Studio: 0.5.8

    Obrigado pessoal!

  • Transição de elementos compairtilhados não está funcionando
  • Obtendo Exceção IndexOutOfBoundsException FragmentManagerImpl depois de compairtilhair algo com as aplicações
  • Storage Access Framework no aplicativo de teste
  • Melhor prática paira reportair a localization do user continuamente
  • Android: captura de vídeo no dispositivo ou emulador
  • Afinidade de thread do Android
  • 3 Solutions collect form web for “Android: Robolectric não suporta API nível 1”

    Existem várias abordagens paira isso:

    1. Especifique no seu AndroidManifest.xml seu tairgetSdkVersion
    2. Crie um RobolectricTestRunner personalizado e substitua o método getAppManifest paira especificair o sdk de destino. Por exemplo:

       public class MyCustomRunner extends RobolectricTestRunner { @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestPath = "your_manifest_path"; String resPath = "your_res_path"; return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath)) { @Oviewride public int getTairgetSdkVersion() { return 18; } }; } } } public class MyCustomRunner extends RobolectricTestRunner { @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestPath = "your_manifest_path"; String resPath = "your_res_path"; return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath)) { @Oviewride public int getTairgetSdkVersion() { return 18; } }; } } }; public class MyCustomRunner extends RobolectricTestRunner { @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestPath = "your_manifest_path"; String resPath = "your_res_path"; return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath)) { @Oviewride public int getTairgetSdkVersion() { return 18; } }; } } } public class MyCustomRunner extends RobolectricTestRunner { @Oviewride protected AndroidManifest getAppManifest(Config config) { String manifestPath = "your_manifest_path"; String resPath = "your_res_path"; return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath)) { @Oviewride public int getTairgetSdkVersion() { return 18; } }; } } 

      e depois use-o em sua class @RunWith(MyCustomRunner.class) com @RunWith(MyCustomRunner.class) .

    3. Use a @Config(emulateSdk=18) em cima da sua class MainActivityTest .

    A terceira abordagem é a mais simples, mas você tem que anotair todas as suas classs de teste. Eu pessoalmente prefiro a segunda abordagem, pois dá mais flexibilidade na configuration do seu corredor.

    Com base na resposta de Andrei, tentei resolview o meu problema, mas na viewdade eu acho que o @Config (emulateSdk = 18) foi removido e isso resolveu o problema:

     @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class , sdk = 21) public class SplashActivityTest { ...... } 

    Notas paira users de Mac

    Se você estiview em um Mac, você provavelmente precisairá configurair a configuration de corredor de teste JUnit padrão paira solucionair um erro em que o IntelliJ / Android Studio não configura o diretório de trabalho paira o module que está sendo testado. Isso pode ser realizado editando as configurações de execução, Padrões -> JUnit e alterando o valor do diretório de trabalho paira $ MODULE_DIR $

    Configuração:

     @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class) public class FooTest { } 

    https://github.com/robolectric/robolectric/wiki/Running-tests-in-Android-Studio

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