unitarias unit test studio pruebas mock example android junit4 robolectric

unit - Android: Robolectric no admite el nivel de API 1



robolectric android example (3)

Esta es mi clase de prueba básica:

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

Cuando ejecuto mi prueba en Android Studio, con la ventana de Terminal, tengo este error:

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.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

Información de Gradle:

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

Uso la última versión de Android Studio: 0.5.8

¡Gracias chicos!


Basándome en la respuesta de Andrei, intenté resolver mi problema, pero en realidad creo que se eliminó @Config (emulateSdk = 18), y esto es lo que resolvió mi problema:

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


Hay varios enfoques para esto:

  1. Especifique en su AndroidManifest.xml su targetSdkVersion
  2. Cree un RobolectricTestRunner personalizado y anule el método getAppManifest para especificar el sdk de destino. P.ej:

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

    y luego MainActivityTest en su clase @RunWith(MyCustomRunner.class) con @RunWith(MyCustomRunner.class) .

  3. Use la @Config(emulateSdk=18) sobre su clase MainActivityTest .

El tercer enfoque es el más simple, pero debe anotar todas sus clases de prueba. Personalmente prefiero el segundo enfoque, ya que ofrece más flexibilidad en la configuración de su corredor.


Notas para usuarios de Mac.

Si se encuentra en una Mac, es probable que deba configurar la configuración predeterminada del corredor de prueba JUnit para solucionar un error donde IntelliJ / Android Studio no establece el directorio de trabajo en el módulo que se está probando. Esto se puede lograr editando las configuraciones de ejecución, Predeterminados -> JUnit y cambiando el valor del directorio de trabajo a $ MODULE_DIR $

Preparar:

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

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