gpt4 book ai didi

android - 访问android测试项目中的资源

转载 作者:IT王子 更新时间:2023-10-28 23:30:23 25 4
gpt4 key购买 nike

我已经设置了一个运行 junit 测试的 android 测试项目。它使用两个 Eclipse 项目“Application”和“ApplicationTest”,我的测试在“ApplicationTest”项目中。在我的一个测试中,我需要访问一个文件,如果我将文件放在 sdcard 上并将 File 对象指向它,这会很好。但是我想将该文件作为资源访问,但这似乎不起作用。这就是我所做的:

  • 将文件保存在 ApplicationTest/res/raw/myfile.xml
  • 尝试使用:InputStream is = getContext().getResources().openRawResource(R.raw.myfile);

但这给了我这个异常(exception):

android.content.res.Resources$NotFoundException: File Hello World, HelloAndroidActivity! from drawable resource ID #0x7f040000at android.content.res.Resources.openRawResource(Resources.java:823)at android.content.res.Resources.openRawResource(Resources.java:799)at com.quizzer.test.QuestionHandlerTests.testImportQuestions(Tests.java:182)at java.lang.reflect.Method.invokeNative(Native Method)at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)Caused by: java.io.FileNotFoundException: Hello World, HelloAndroidActivity!at android.content.res.AssetManager.openNonAssetNative(Native Method)at android.content.res.AssetManager.openNonAsset(AssetManager.java:406)at android.content.res.Resources.openRawResource(Resources.java:820)... 14 more

我的测试类扩展了 AndroidTestCase,所以这就是上下文的来源。

更新:

所以问题似乎是在编译期间使用了测试项目中的资源,但在运行时使用了主项目中的资源。我还不确定如何解决这个问题。所以目前它只有在我在测试项目和主项目中都放置相同的原始资源时才有效,这当然很愚蠢。

最佳答案

我建议延长 <a href="http://developer.android.com/reference/android/test/ActivityTestCase.html" rel="noreferrer noopener nofollow">ActivityTestCase</a>而不是 AndroidTestCase .您可以通过

访问测试项目资源

getInstrumentation().getContext().getResources().openRawResource(R.raw.your_res) .

虚拟测试用例示例:

public class Test extends ActivityTestCase {

public void testFoo() {

// .. test project environment
Context testContext = getInstrumentation().getContext();
Resources testRes = testContext.getResources();
InputStream ts = testRes.openRawResource(R.raw.your_res);

assertNotNull(testRes);
}
}

然后在测试方法中使用getInstrumentation().getTargetContext()无论您在哪里使用 getContext()在您的AndroidTestCase扩展名。

关于android - 访问android测试项目中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com