Android单元测试中的测试数据源
我想测试从服务器返回的数据的解析 我想我可以创建几个测试XML文件,然后将它们提供给sax解析器,该解析器使用我的自定义数据处理程序(就像我测试的应用程序一样) 但是我应该把这些测试XML放在哪里呢 我尝试了Android单元测试中的测试数据源,android,unit-testing,resources,Android,Unit Testing,Resources,我想测试从服务器返回的数据的解析 我想我可以创建几个测试XML文件,然后将它们提供给sax解析器,该解析器使用我的自定义数据处理程序(就像我测试的应用程序一样) 但是我应该把这些测试XML放在哪里呢 我尝试了[project\u root]/res/xml,但随后出现了错误: android.content.res.Resources$NotFoundException:资源ID#0x7f040000类型#0x1c无效 位于android.content.res.Resources.loadX
[project\u root]/res/xml
,但随后出现了错误:
android.content.res.Resources$NotFoundException:资源ID#0x7f040000类型#0x1c无效
位于android.content.res.Resources.loadXmlResourceParser(Resources.java:1870)
位于android.content.res.Resources.getXml(Resources.java:779)
这是否意味着xml无效,或者android找不到xml文件?
(我使用来自服务器的相同XML—从firebug的网络面板复制并粘贴到文件中)
我是否可以以某种方式将XML作为文本文件读取,因为
getContext().getResources().getXml(R.XML.test\u response1)
返回XmlResourceParser
,而不是String
(我更喜欢)将XML放入MyAppTest/assets
,例如MyAppTest/assets/my.XML
,然后使用
InputStream myxml = getInstrumentation().getContext().getAssets().open("my.xml");
然后,您可以使用此流调用解析器。只需将文件放入当前包(即资源包)并使用类加载器
private InputStream getTestImage(String pathToFile) throws IOException
{
final ClassLoader loader = getClass().getClassLoader();
assertNotNull(loader);
final InputStream resourceAsStream = loader.getResourceAsStream(pathToFile);
assertNotNull(resourceAsStream);
return resourceAsStream;
}
java.io.FileNotFoundException:test_response1.xml在android.content.res.AssetManager.openAsset(本机方法)我不知道发生了什么。。当我调用getContext().getAssets().list(“/”)时,我会得到几个文件和文件夹的列表,其中有“资产”文件夹。当我在“/assets”文件夹中列出文件时,我什么也得不到-好像文件夹是空的…取决于xml文件的位置(在你的应用程序的资产或测试的资产中),你需要正确的上下文通过getAssets()找到它。@dtmilano:也许我现在是瞎的,但是我没有找到一种方法在测试项目的单元测试中获取应用程序上下文。你能告诉我一个吗?getInstrumentation().getContext()和getInstrumentation().getTargetContext()应该为您提供所需的上下文。我认为这将不起作用,因为:本质上是因为dex工具将忽略任何非类文件,除非它使用额外参数运行。这对我在读取测试项目(而不是正在测试的应用程序项目)内“res/raw”文件夹中放置的文件时使用ICS非常有效