web-dev-qa-db-ja.com

Android rawリソースのテスト

Android Studioに次のフォルダー構造があります:

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

AndroidTest要素のrawフォルダーにあるtest_fileリソースにアクセスしようとしています。以下は、ActivityInstrumentationTestCase2を継承するRobotiumテストケース内のコードです。

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

リソースが見つからないため、Android Studioは参照エラーをスローします。正確なエラーは「シンボルtest_fileを解決できません」です。

AndroidTestリソースバンドルに存在するテストケースからこのリソースを参照するにはどうすればよいですか?

35
jlhonora

デフォルトでは、androidTestプロジェクトにはアプリのRクラスが含まれますが、androidTestのリソースは別のファイルに生成されます。テストプロジェクトからRクラスをインポートしてください:

import com.your.package.test.R;

[..]

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

テストプロジェクトのRクラスを直接参照することもできます。

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

androidTestリソースが適切な場所(src/androidTest/res)にありましたが、<normal.package>.test.Rを介してそれらにアクセスできませんでした。何が起こっているのかを把握しようとしてグーグルで多くの時間を費やしました。

私は最終的に答えにつまずいた。 buildTypeを指定したapplicationIdSuffixを構築している場合、ファイルは<applicationId><applicationIdSuffix>.test.R !!!!にあります。

つまり.

applicationId "com.example.my.app"

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}

適切なディレクトリにandroidTestリソースがある場合は、com.example.my.app.debug.test.R !!!!経由でのみアクセスできます。

14
joshkendrick