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).

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?

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); } } } 
  • Prueba de solicitudes okHttp con Robolectric - callbacks
  • Pruebas con Robolectric y ANT
  • Assert ImageView se cargó con un ID de recurso específico extraíble
  • Robolectric + OkHttp + retrofit + prueba de unidad rxJava
  • Robolectric: Prueba de que una cancelación en el diálogo no inició nueva actividad
  • Manifiesto y problemas de configuración para conseguir que Robolectric trabaje con Android Studio 1.1.0
  • Prueba de DialogFragments con Robolectric
  • Prueba de vistas personalizadas con Robolectric
  • JaCoCo no trabaja con pruebas Robolectric
  • Robolectric's Shadow Object y Mocking
  • Robolectric inflar vistas personalizadas para pruebas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.