在Android Instrumentation jUnit测试中访问R.raw资源

在Android Instrumentation jUnit测试中访问R.raw资源,android,junit,android-resources,Android,Junit,Android Resources,我试图在Android Studio中创建一些Android工具类,以便测试我的ormlite类。ormlite的DBHelper类需要读取ormlite配置文件,该文件位于myres/raw/ormlite_config.txt中,使用R.raw.ormlite_config访问 这不是我使用openrawsource(R.raw.ormlite_config)来获取的,因为DBHelper超类的构造函数需要int资源 当我运行测试时,它无法找到它: android.content.res.R

我试图在Android Studio中创建一些Android工具类,以便测试我的ormlite类。ormlite的
DBHelper
类需要读取ormlite配置文件,该文件位于my
res/raw/ormlite_config.txt
中,使用
R.raw.ormlite_config
访问

这不是我使用
openrawsource(R.raw.ormlite_config)
来获取的,因为DBHelper超类的构造函数需要int资源

当我运行测试时,它无法找到它:

android.content.res.Resources$NotFoundException:Resource ID#0x7f090001

以下是完整的堆栈跟踪:

android.content.res.Resources$NotFoundException: Resource ID #0x7f090001
at android.content.res.Resources.getValue(Resources.java:1266)
at android.content.res.Resources.openRawResource(Resources.java:1181)
at android.content.res.Resources.openRawResource(Resources.java:1158)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.openFileId(OrmLiteSqliteOpenHelper.java:310)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.<init>(OrmLiteSqliteOpenHelper.java:76)
at com.inadaydevelopment.herdboss.DB.<init>(DB.java:40)
at com.inadaydevelopment.herdboss.DB.shared(DB.java:31)
at com.inadaydevelopment.herdboss.ORMLiteTest.setup(ORMLiteTest.java:29)
...
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853)

Tests ran to completion.
我的jUnit测试用例:

@RunWith(AndroidJUnit4.class)
public class ORMLiteTest {
    @Before
    public void setup() {
        DB.shared(InstrumentationRegistry.getContext());
    }
}
修复了Commonware的答案:

@RunWith(AndroidJUnit4.class)
public class ORMLiteTest {
    @Before
    public void setup() {
        DB.shared(InstrumentationRegistry.getTargetContext());
    }
}
getContext()
返回指向
androidTest/
源集中资源的
Context
。如果资源位于实际应用程序本身(例如,
main/
sourceset),请使用
getTargetContext()

@RunWith(AndroidJUnit4.class)
public class ORMLiteTest {
    @Before
    public void setup() {
        DB.shared(InstrumentationRegistry.getTargetContext());
    }
}