我正在开发使用 Android 的 java.xml.parsers.DocumentBuilder 和 DocumentBuilderFactory 实现从 XML 文件加载信息的软件。我正在为我的对象编写单元测试,我需要能够提供各种 xml 文件来执行被测代码。我正在使用 Eclipse 并且有一个单独的 Android 测试项目。我找不到将测试 xml 放入测试项目的方法,以便被测代码可以打开文件。
- 如果我将文件放在测试项目的 /assets 中,被测代码看不到它。
- 如果我将文件放在被测代码的 /assets 中,它当然可以看到这些文件,但现在我的实际系统中只包含测试数据文件。
- 如果我将文件手动复制到 /sdcard/data 目录,我可以从被测代码中打开它们,但这会干扰我的测试自动化。
任何关于如何让不同的 xml 测试文件驻留在测试包中但对被测代码可见的建议将不胜感激。
这是我尝试构建单元测试的方式:
public class AppDescLoaderTest extends AndroidTestCase
{
private static final String SAMPLE_XML = "sample.xml";
private AppDescLoader m_appDescLoader;
private Application m_app;
protected void setUp() throws Exception
{
super.setUp();
m_app = new Application();
//call to system under test to load m_app using
//a sample xml file
m_appDescLoader = new AppDescLoader(m_app, SAMPLE_XML, getContext());
}
public void testLoad_ShouldPopulateDocument() throws Exception
{
m_appDescLoader.load();
}
}
这不起作用,因为 SAMPLE_XML 文件在测试的上下文中,但 AndroidTestCase 为被测系统提供了一个上下文,它无法从测试包中看到资产。
这是根据给出的答案工作的修改后的代码:
public class AppDescLoaderTest extends InstrumentationTestCase
{
...
protected void setUp() throws Exception
{
super.setUp();
m_app = new Application();
//call to system under test to load m_app using
//a sample xml file
m_appDescLoader = new AppDescLoader(m_app, SAMPLE_XML, getInstrumentation().getContext());
}