web-dev-qa-db-fra.com

Android test de la ressource brute

J'ai la structure de dossiers suivante dans Android Studio:

├── androidTest
│   ├── Java
│   └── res
│       └── raw
│           └── test_file
└── main
    ├── Java
    └── res
        └── raw
            └── app_file

J'essaie d'accéder au test_file ressource qui existe dans le dossier brut des éléments androidTest. Voici le code dans un scénario de test Robotium qui hérite de ActivityInstrumentationTestCase2:

InputStream is = this.getInstrumentation()
                 .getContext()
                 .getResources()
                 .openRawResource(R.raw.test_file);

Android Studio génère une erreur de référence car la ressource est introuvable. L'erreur exacte est "Impossible de résoudre le symbole test_file".

Comment puis-je référencer cette ressource à partir d'un cas de test, qui existe sur le bundle de ressources androidTest?

35
jlhonora

Par défaut, votre projet androidTest inclura la classe R de votre application, mais les ressources androidTest seront générées dans un fichier séparé. Assurez-vous d'importer la classe R à partir de votre projet de test:

import com.your.package.test.R;

[..]

getInstrumentation().getContext().getResources().openRawResource(R.raw.test_file);

Vous pouvez également référencer directement la classe R du projet de test:

getInstrumentation().getContext().getResources().openRawResource(com.your.package.test.R.raw.test_file);
42
Jacob Ras

J'avais les ressources androidTest au bon endroit (src/androidTest/res) et je ne pouvais toujours pas y accéder via <normal.package>.test.R. J'ai passé beaucoup de temps à googler pour essayer de comprendre ce qui se passait ..

Je suis finalement tombé sur la réponse. Si vous créez un buildType où vous avez spécifié un applicationIdSuffix, vos fichiers se trouvent à <applicationId><applicationIdSuffix>.test.R !!!!

c'est à dire.

applicationId "com.example.my.app"

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}

si vous avez des ressources androidTest dans le bon répertoire, vous ne pouvez y accéder que via com.example.my.app.debug.test.R !!!!

14
joshkendrick