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

时间:2016-07-23 19:59:35

标签: android junit android-resources

我正在尝试在Android Studio中制作一些Android Instrumentation类,以便我可以测试我的ormlite类。 ormlite的DBHelper类需要从ormlite配置文件中读取,该文件位于我的res/raw/ormlite_config.txt中,并使用R.raw.ormlite_config进行访问。

这不是我使用openRawResource(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.

DBHelper:

public class DBHelper extends OrmLiteSqliteOpenHelper {
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
    }
}

我的jUnit测试用例:

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

使用Commonsware的答案修复:

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

1 个答案:

答案 0 :(得分:15)

@Override public int getCount() { return name.length; // return data-source size from here } 返回getContext()指向您Context来源集中的资源。如果资源位于实际应用中,请使用androidTest/(例如,getTargetContext()源设置)。