2015-04-09 11 views
6

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'] 
     } 
    } 
} 
+0

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 –

+0

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

+0

Indovina errata. Puoi rimuovere la menzione del file manifest in configurazione? –

risposta

1

Durante le indagini abbiamo trovato la causa del problema. Se si utilizza android gradle plugin v1.1.x, non è necessario in comune robolectric gradle plugin.

Fare attenzione che la versione errata di robolectric gradle plugin interromperà i test.