Estoy desarrollando software que carga información de archivos XML mediante la implementación de Android de java.xml.parsers.DocumentBuilder y DocumentBuilderFactory. Estoy escribiendo pruebas unitarias de mis objetos y necesito poder proporcionar una variedad de archivos xml que ejercerán el código bajo prueba. Estoy usando Eclipse y tengo un Android Test Project por separado. No puedo encontrar una manera de poner el xml de la prueba en el proyecto de prueba de modo que el código bajo prueba pueda abrir los archivos.Cómo proporcionar archivos de datos para las pruebas de unidad de Android
- Si pongo los archivos en/assets del proyecto de prueba, el código bajo prueba no puede verlo.
- Si pongo los archivos en/assets del código bajo prueba, puede, por supuesto, ver los archivos, pero ahora estoy abarrotando mi sistema real con archivos de datos solo de prueba.
- Si copio manualmente los archivos en el directorio/sdcard/data, puedo abrirlos desde el código bajo prueba, pero eso interfiere con la automatización de mis pruebas.
Cualquier sugerencia de cómo residen en el paquete de prueba diferentes archivos de prueba xml pero será visible para el código bajo prueba sería muy apreciada.
Así es como he tratado de estructurar la prueba de unidad:
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();
}
}
esto no funcionó como el archivo de SAMPLE_XML es en el contexto de la prueba, pero AndroidTestCase provee un contexto para el sistema bajo prueba, que no puede ver un activo desde el paquete de prueba.
El código modificado que trabajó por Respuesta:
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());
}
Gracias. Esto funcionó, solo que primero tuve que cambiar mi caso de prueba a InstrumentationTestCase. –
He modificado mi pregunta para mostrar el código que funcionó. Gracias por tu ayuda. –
+1 para la opción 2.Acabo de agregar un directorio de activos al nivel de res y el nuevo código 'funcionó' en la versión de Android Studio. No es necesario farblear con las rutas de compilación. –