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:
- Especifique en su
AndroidManifest.xml
sutargetSdkVersion
Cree un
RobolectricTestRunner
personalizado y anule el métodogetAppManifest
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)
.Use la
@Config(emulateSdk=18)
sobre su claseMainActivityTest
.
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