我正在尝试为我的检测测试找到一种方法来访问测试包中生成的字符串资源。
更多详情:
我有一个继承自ActivityInstrumentationTestCase2的Android测试用例。我首先使用Eclipse的新Android测试项目来创建测试。测试项目有资源(类似于常规Android项目的资源)。我试图找到一种方法以编程方式访问各个测试中的测试项目中的String资源。我试过了:
String s = getInstrumentation().getContext().getString(R.string.blah);
和
String s = mActivity.getApplicationContext().getString(R.string.blah);
两种方法都抛出NotFoundException。我在strings.xml中定义了字符串“blah”。上面代码中的R是从我的测试包导入而不是被测试的应用程序包。我可以使用后一个调用访问应用程序包中定义的资源。
在我的测试中找出一种访问XML定义的字符串资源的方法会很有用(因为我想避免在代码中键入字符串)。我做错了什么?
答案 0 :(得分:24)
即使这篇文章不再是最新的 - 这个添加可能对某人有所帮助:
要了解其工作原理,您必须记住,您的工具所处的上下文不是您正在运行测试的应用程序的上下文。正如您所说,您可以从实验环境中访问目标的资源。您可以在测试项目内的单独xml文件中为您的检测上下文定义一些,或者 - 如果您想要使用预定义的资源 - 您可以这样使用它们:
Resources res = getInstrumentation().getTargetContext().getResources();
res.getString(R.string.xxx); // get a string resource
在测试用例构造完全完成之前,检测上下文(如Wujun所写)和目标上下文都不可用。
答案 1 :(得分:3)
我试过了:
String s = getInstrumentation().getContext().getString(com.myProject.test.R.string.blah);
其中com.myProject
是要测试的项目的包,com.myProject.test
是测试项目的包。
如果我将代码放在setup()
中,它对我有用。如果我把它放在构造函数中,它就不起作用。
答案 2 :(得分:1)
我认为如果不将资源文件存储在其他地方,这是不可能的,但你可以使用Robotium之类的东西,只需使用Solo.getString()就可以得到你的资源。