example - robolectric android studio
Gradle Robolectric Resources NotFoundException en pruebas (2)
Ya sabía que este problema se había planteado antes, pero no puedo resolver este problema. Puedo compilar y aplicar pruebas con jUnit, Robolectric y Gradle. El problema o error aparece cuando trato de probar una actividad u obtener un recurso. Cada vez que tengo el mismo problema:
android.content.res.Resources $ NotFoundException: recurso desconocido
Recursos $ NotFoundException: no hay tal tema
PageActivity startPageActivity = Robolectric.buildActivity(PageActivity.class).create().get();
Context context = Robolectric.getShadowApplication().getApplicationContext();
ShadowContext shadowContext = shadowOf(context);
assertNotNull( " No App name String " ,shadowContext.getString(R.string.app_name) );
Y esta es la estructura del proyecto:
.
├── build.gradle
├── settings.gradle
└── mainproject
├── build
│ ├── classes
│ │ └── debug
├── build.gradle
└── src
└── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com...
│ └── resources
└── envDev
│ └── java
│ └── com...
│ └── resources
└── envQa
│ └── java
│ └── com...
│ └── resources
└── envLive
│ └── java
│ └── com...
│ └── resources
└── test
│ └── src
│ └── java
│ └── com...
│ └── rescources
└── testEnvDev
│ └── src
│ └── java
│ └── com...
│ └── rescources
└── testEnvQa
│ └── src
│ └── java
│ └── com...
│ └── rescources
└── testEnvLive
└── src
└── java
└── com...
└── rescources
Este es el conjunto fuente definido en gradle:
sourceSets {
main {
java.srcDir file(''src/main/java'')
manifest.srcFile file(''src/main/AndroidManifest.xml'')
res.srcDir file(''src/main/resources'')
}
envDev {
java.srcDir file(''src/envDev/java'')
manifest.srcFile ''src/envDev/AndroidManifest.xml''
res.srcDir file(''src/envDev/resources'')
}
envQa {
java.srcDir file(''src/envQa/java'')
manifest.srcFile ''src/envQa/AndroidManifest.xml''
res.srcDir file(''src/envQa/resources'')
}
envLive {
java.srcDir file(''src/envLive/java'')
manifest.srcFile ''src/envLive/AndroidManifest.xml''
res.srcDir file(''src/envLive/resources'')
}
instrumentTest {
java.srcDir file(''src/test/java'')
res.srcDir file(''src/test/resources'')
}
instrumentTestEnvDev {
java.srcDir file(''src/testEnvDev/java'')
res.srcDir file(''src/testEnvDev/resources'')
}
instrumentTestEnvQa {
java.srcDir file(''src/testEnvQa/java'')
res.srcDir file(''src/testEnvQa/resources'')
}
instrumentTestEnvLive {
java.srcDir file(''src/testEnvLive/java'')
res.srcDir file(''src/testEnvLive/resources'')
}
}
¿Podría alguien dar una mano para enfrentar este problema?
Gracias
Tuve este mismo problema incluso con Robolectric v2.3-SNAPSHOT. Lo resolvió estableciendo explícitamente el manifiesto en el archivo de prueba mediante la anotación Config, como
@Config(manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest extends AndroidTestCase {
...
}
Al final logré resolverlo moviéndome a Robolectric v2.3-SNAPSHOT.
Puede encontrar esta INSTANTÁNEA aquí oss.sonatype.org/index.html#nexus-search;quick~org.robolectric
El mismo complemento de Jake Wharton funciona bien con este Robolectric v2.3-SNAPSHOT.
Tal vez esta información podría ayudar a alguien más.