android - org - run robolectric test




Robolectric: Resources $ NotFoundException: ID de ressource de chaîne avec Android Gradle Plugin 3 (4)

Android Studio 3.0 Beta2
classpath 'com.android.tools.build:gradle:3.0.0-beta3'
testCompile 'org.robolectric:robolectric:3.4.2'

Classe de test que j'utilise et qui ne s'exécute pas:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricTestRunner.class)
public class RecipeAdapterTest {
    private MainActivity activity;

    @Before
    public void setup() {

    activity = Robolectric.setupActivity(MainActivity.class);

    /* Also tried this same Error
     activity = Robolectric.buildActivity(MainActivity)
                .create()
                .resume()
                .get();
    */
    }

    @Test
    public void testActivityShouldNotBeNull() {
        assertThat(activity, is(notNullValue()));
    }
}

Voici la trace de la pile de l'erreur:

android.content.res.Resources$NotFoundException: String resource ID #0x7f0c0020

    at android.content.res.Resources.getText(Resources.java:274)
    at android.content.res.Resources.getString(Resources.java:360)
    at android.content.Context.getString(Context.java:376)
    at org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.java:100)
    at org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.java:110)
    at org.robolectric.android.controller.ActivityController.attach(ActivityController.java:56)
    at org.robolectric.android.controller.ActivityController.of(ActivityController.java:25)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:98)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:94)
    at org.robolectric.Robolectric.setupActivity(Robolectric.java:102)
    at me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.java:63)

Dans les Edit Configurations j'ai défini le Working Directory sur $MODULE_DIR$

Merci beaucoup pour toute suggestion.


Dans mon cas, le problème suivant a été résolu: "Le problème est lié au studio Android. Allez dans" Exécuter "->" Modifier les configurations ... "et modifiez la valeur" Répertoire de travail "en $ MODULE_DIR $

Exécutez vos tests.

Plus d'infos ici sous "Construire avec Android Studio". "

référence: https://github.com/robolectric/robolectric/issues/2653


La documentation de Robolectric indique que la configuration suivante doit être utilisée avec Android Studio 3.x:

android {
  testOptions {
    unitTests.includeAndroidResources true
  }
}

Vous pouvez également essayer @Config(manifest = "<projectFolder>/src/main/AndroidManifest.xml") dans le cas où vous ne pouvez pas simplement inclure les ressources car certains tests de projets échoueront avec cela.


Comme mentionné par un ingénieur de l’équipe de Google (probablement Xavier Ducrohet ), Robolectric a des problèmes avec AAPT2:

Robolectric n'est pas compatible avec aapt2.

Deux options ici.

Première option - suivez les directives de Robolectric pour Android Studio 3.0+

Ajoutez ce qui suit à votre build.gradle:

android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

Annotez votre test avec le testeur Robolectric:

@RunWith(RobolectricTestRunner.class)
public class SandwichTest {
}

Deuxième option: désactiver AAPT2 en ajoutant la ligne suivante dans le fichier gradle.properties :

android.enableAapt2=false






robolectric