Non riesco a caricare le risorse durante l'esecuzione dei test di unità dalla riga di comando. Funziona bene in IntelliJ.
sto usando:
- com.android.tools.build:gradle:1.1.3
- org.robolectric: robolectric-Gradle-plugin: 1.0.1
- org.robolectric : robolectric: 2,4
ho la seguente struttura del progetto (Multi-modulo):
+---module1
| | build.gradle
| \---src
| +---main
| | | AndroidManifest.xml
| | |
| | +---res
| | | \---values
| | | strings.xml
| \---test
| \---java
| \---example
| | FooTest.java
+---module2
etc
Il mio test (semplificato) si presenta così:
@Config(emulateSdk = 18, reportSdk = 18, manifest = "./src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class FooTest {
@Test
public void test() {
String result = Robolectric.application.getString(R.string.error_message);
assertThat(result, notNullValue());
}
}
ottengo questo stacktrace:
android.content.res.Resources$NotFoundException: unknown resource 2131361826
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:311)
at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:69)
at android.content.res.AssetManager.getResourceText(AssetManager.java)
at android.content.res.Resources.getText(Resources.java:235)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:363)
at android.content.res.Resources.getText(Resources.java)
at android.content.res.Resources.getString(Resources.java:325)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:41)
at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:96)
at android.content.Context.getString(Context.java)
Nota: Sono abbastanza nuovo per Gradle quindi è probabile che ci sia un errore di configurazione da qualche parte. Ho assunto che seguendo la convenzione della struttura del progetto non ho bisogno di specificare dove trovare le risorse. Ho provato a specificarli ma senza fortuna:
android {
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
}
Puoi provare a cambiare il tuo manifest di configurazione in 'module1/src/main/AndroidManifest.xml'. Non è una correzione per il tuo problema (ora probabilmente avresti test falliti in AS) ma solo veloce controllo del problema –
Ciao, ho provato e ottenuto questo: > File '/ opt/buildagent/work/22b7e45eb23ab445/module1/module1 /src/main/AndroidManifest.xml 'specificato per la proprietà' manifest 'non esiste. – Alix
Indovina errata. Puoi rimuovere la menzione del file manifest in configurazione? –