Как получить доступ к необработанному файлу из InstrumentationTestCase?

Я пытаюсь получить доступ к необработанному ресурсу с именем test.txt, расположенному в androidTest/res/raw. Я настроил свой проект в соответствии с документацией, найденной здесь .

Структура моего проекта:

  • src
    • main
      • java
      • разрешение
    • androidTest
      • java
      • res
        • raw
          • test.txt

Вот мой тестовый класс:

package something.traveltracker;

import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import java.io.InputStream;
import something.traveltracker.models.RuterStop;

public class RuterStopAndroidTest extends InstrumentationTestCase {
  @SmallTest
  public void testCreateRuterStopFromJSON() {
    InputStream is = getInstrumentation().getTargetContext().getResources().openRawResource(R.raw.test);
    RuterStop ruterStop = RuterStop.createFromJSON(is);

    assertSomething...
  }
}   

Проблема в том, что R.raw. только перечисляет ресурсы в папке main/res/raw. Я где-то читал, что мне нужно было добавить .test при импорте R;

import something.traveltracker.test.R

Однако это не работает для меня. Я использую Android Studio 1.0.2 с Gradle 2.2.1.

Вот мой androidManifest.xml

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "something.traveltracker"
        minSdkVersion 19
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services:6.5.87'
}

Вопрос. Как я могу получить доступ к этому тестовому ресурсу? Мне нужен ресурс только при запуске этого модульного теста, и я не хочу, чтобы он был включен в окончательный apk.

EDIT: теперь я могу импортировать something.traveltracker.test.R в свой класс, добавив следующую строку в файл build.gradle:

sourceSets {
        androidTest.res.srcDirs = ["src/androidTest/res"]
    }

person khmysen    schedule 11.02.2015    source источник
comment
Кроме того, мне пришлось изменить getTargetContext() на getContext(), так как мне нужен был контекст InstrumentationTest, чтобы получить правильный ресурс.   -  person khmysen    schedule 11.02.2015


Ответы (1)


Это довольно старый пост, но поскольку ответов нет, и на случай, если кто-то вроде меня задается вопросом, как это сделать:

  1. Создайте папку src/androidTest/resources
  2. Внутри папки добавьте свои ресурсы под пакетом теста, куда вы их будете загружать (поэтому при доступе из com.test.MyTest поместите файлы в src/androidTest/resources/com/test/test.txt)
  3. Загрузите файл, используя getClass().getResourceAsStream('test.txt')
person Guillaume    schedule 15.02.2018