访问仪器测试资源

Vas*_*kan 20 testing instrumentation android

我正在尝试为我的检测测试找到一种方法来访问测试包中生成的字符串资源.

更多细节:

我有一个继承自ActivityInstrumentationTestCase2的Android测试用例.我首先使用Eclipse的新Android测试项目来创建测试.测试项目有资源(类似于常规Android项目的资源).我试图找到一种方法以编程方式访问各个测试中的测试项目中的String资源.我试过了:

String s = getInstrumentation().getContext().getString(R.string.blah);
Run Code Online (Sandbox Code Playgroud)

String s = mActivity.getApplicationContext().getString(R.string.blah);
Run Code Online (Sandbox Code Playgroud)

两种方法都抛出NotFoundException.我在strings.xml中定义了字符串"blah".上面代码中的R是从我的测试包导入而不是被测试的应用程序包.我可以使用后一个调用访问应用程序包中定义的资源.

在我的测试中找出一种访问XML定义的字符串资源的方法是有用的(因为我想避免在代码中键入字符串).我究竟做错了什么?

cod*_*ody 25

即使这篇文章不再是最新的 - 这个添加可能会帮助某人:

要了解其工作原理,您必须记住,您的工具所处的上下文不是您正在运行测试的应用程序的上下文.正如您所说,您无法从实验环境中访问目标的资源.您可以在测试项目内的单独xml文件中为您的检测上下文定义一些,或者 - 如果您想使用预定义的资源 - 您可以通过以下方式获取它们:

 Resources res = getInstrumentation().getTargetContext().getResources();
 res.getString(R.string.xxx); // get a string resource
Run Code Online (Sandbox Code Playgroud)

在测试用例构建完全完成之前,检测上下文(如Wujun所写)和目标上下文都不可用.

  • "getTargetContext()"代替"getContext()"做了伎俩:-)(也许​​海报可以将答案标记为"已接受"?) (5认同)

Phi*_*ipp 1

我认为如果不将资源文件存储在其他地方,这是不可能的,但是您可以使用像Robotium这样的东西,您只需使用 Solo.getString() 即可获取资源。