我正在使用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());
}