Robolectric 2.x + Maven en Jenkins falló con las dependencias APKLIB
Estoy teniendo un problema con Robolectric 2.x (estoy usando 2.1) con un proyecto de Maven de Android usando APKLIBs.
Parece que Robolectric 2.x espera que las bibliotecas de Android sean referenciadas en el proyecto.properties (Este archivo es llenado automáticamente por Intellij o Eclipse).
- Cambiar la conectividad de Android con Robolectric
- Robolectric es-singlepane (/ solo-fragmento) -test
- Robolectric Test no llama a textWatcher.onTextChanged
- Uso de Espresso 2.0 + Roboeléctrico en un proyecto de Android
- Robolectric: ¿Cómo puedo probar una actividad que contiene un SherlockFragment?
Funciona muy bien cuando se utiliza Maven en el entorno de desarrollo, sin embargo Si quiero construir mi proyecto Android Maven en un servidor CI (Jenkins) mi construcción está fallando con:
java.lang.RuntimeException: huh? can't find parent for StyleData{name='Theme_Abs_cs', parent='@style/Theme_Sherlock_Light'}
Aparentemente Robolectric no puede encontrar las dependencias de la biblioteca de Android.
¿Alguien tiene una configuración trabajando con Android APKLIB + Jenkins + Maven + Robolectric 2.x?
- Proporcionando datos de prueba para SharedPreferences para Robolectric
- Robolectric 2 - crear la actividad bajo prueba con la intención
- Robolectric With Gradle:. \ Res \ values no es un directorio
- Java.util.ConcurrentModificationException en las pruebas de JUnit
- Robolectric visible () "W / InputEventReceiver: Se ha intentado consumir eventos de entrada agrupados pero el receptor de eventos de entrada ya se ha eliminado."
- ¿Cuál es la diferencia entre Robolectric.setupActivity () y Robolectric.buildActivity ()?
- NPE al obtener Robolectric ShadowApplication con Volley y Dagger
- GetSupportActionBar () devuelve null con Robolectric
Así es como manejamos esto en Square … android-maven-plugin descomprime tus dependencias de APK en target/unpack
, entonces extendemos RobolectricTestRunner para tirar de ellos. Un poco torpe pero lo mejor que hemos encontrado.
public class SquareTestRunner extends RobolectricTestRunner { private static boolean alreadyRegisteredAbs = false; public SquareTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest createAppManifest(File baseDir) { return new MavenAndroidManifest(Fs.newFile(new File("."))); } public static class MavenAndroidManifest extends AndroidManifest { public MavenAndroidManifest(FsFile baseDir) { super(baseDir); } @Override protected List<FsFile> findLibraries() { // Try unpack folder from maven. FsFile unpack = getBaseDir().join("target/unpack/apklibs"); if (unpack.exists()) { FsFile[] libs = unpack.listFiles(); if (libs != null) { return asList(libs); } } return emptyList(); } @Override protected AndroidManifest createLibraryAndroidManifest(FsFile libraryBaseDir) { return new MavenAndroidManifest(libraryBaseDir); } } }
Tengo un problema similar para Android Studio + Robolectric2.3 + android-maven-plugin 3.9.0-rc.2 proyecto que está usando AppCompat lib (tipo aar) causando:
Java.lang.RuntimeException: ¿eh? No puede encontrar padre para StyleData {name = 'Theme_Custom', parent = '@ style / Theme_AppCompat_Light'
Para manejar esto creo el corredor de la prueba de encargo:
public class MyTestRunner extends RobolectricTestRunner { private static boolean alreadyRegisteredAbs = false; public MyTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest createAppManifest(FsFile manifestFile, FsFile resDir, FsFile assetsDir) { return new MavenAndroidManifest( manifestFile, resDir, assetsDir); } public static class MavenAndroidManifest extends AndroidManifest { public MavenAndroidManifest(FsFile androidManifestFile, FsFile resDirectory, FsFile assetsDirectory) { super(androidManifestFile, resDirectory, assetsDirectory); } public MavenAndroidManifest(FsFile libraryBaseDir) { super(libraryBaseDir); } @Override protected List<FsFile> findLibraries() { // Try unpack folder from maven. FsFile unpack = getBaseDir().join("target/unpacked-libs"); if (unpack.exists()) { FsFile[] libs = unpack.listFiles(); if (libs != null) { return Arrays.asList(libs); } } return Collections.emptyList(); } @Override protected AndroidManifest createLibraryAndroidManifest(FsFile libraryBaseDir) { return new MavenAndroidManifest(libraryBaseDir); } } }
- ¿Cómo activar y desactivar el brillo automático? (No una repetición)
- Android Agregar Maps v2 API a Master Detail Flow – Error al inflar el fragmento de clase