如何从InstrumentationTestCase访问原始文件?

时间:2015-02-11 07:10:24

标签: android unit-testing resources projects-and-solutions

我正在尝试访问位于androidTest / res / raw中的名为test.txt的原始资源。我根据找到的here文档设置了我的项目。

我的项目结构:

  • SRC
      • 的java
      • RES
    • androidTest
      • 的java
      • RES
          • 的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文件夹中的资源。我在某处读到了我必须在导入R时添加.test;

import something.traveltracker.test.R

然而,这对我不起作用。我正在使用带有gradle 2.2.1的Android studio 1.0.2。

继承我的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中。

编辑:我现在可以通过在build.gradle文件中添加以下行来在我的类中导入something.traveltracker.test.R:

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

1 个答案:

答案 0 :(得分:0)

这是一篇相当古老的文章,但由于没有答案,以防有人像我这样想知道怎么做:

  1. 创建文件夹src/androidTest/resources
  2. 在文件夹中,将您的资源添加到要加载它们的测试包中(因此,如果从com.test.MyTest访问,请将文件放在src/androidTest/resources/com/test/test.txt
  3. 使用getClass().getResourceAsStream('test.txt')
  4. 加载文件