Cómo probar proveedores de contenido

Si estás implementando un proveedor de contenido para almacenar y recuperar datos o hacer que sean accesibles a otras apps, debes probar el proveedor y asegurarte de que no se comporte de manera inesperada. En esta lección, se describe cómo probar los proveedores de contenido público y también se aplica a los proveedores que mantienes como privados en tu propia app.

Cómo crear pruebas de integración para proveedores de contenido

Los proveedores de contenido te permiten acceder a los datos reales del usuario, por lo que es importante que te asegures de probar el proveedor de contenido en un entorno de pruebas aislado. Este enfoque te permite realizar ejecuciones solo con dependencias de datos establecidas de forma explícita en el caso de prueba. También significa que las pruebas no modifican los datos reales del usuario. Por ejemplo, debes evitar escribir una prueba que falle porque quedaron datos de una prueba anterior. Del mismo modo, la prueba debe evitar agregar o borrar información de contacto real en un proveedor.

Para probar el proveedor de contenido de forma aislada, usa la clase ProviderTestCase2. Esta clase te permite usar clases de objetos ficticios de Android, como IsolatedContext y MockContentResolver, para acceder a la información de archivos y bases de datos sin afectar los datos reales del usuario.

La prueba de integración se debe escribir como una clase de prueba de JUnit 4. Para obtener más información sobre la creación de clases de prueba JUnit 4 y el uso de aserciones de JUnit 4, consulta Cómo crear una clase de prueba de unidad local.

A fin de crear una prueba de integración para tu proveedor de contenido, debes seguir estos pasos:

  1. Crea la clase de prueba como una subclase de ProviderTestCase2.
  2. Especifica la clase AndroidJUnitRunner que AndroidX Test proporciona como ejecutor de pruebas predeterminado.
  3. Configura el objeto Context de la clase ApplicationProvider. Consulta el siguiente fragmento para ver un ejemplo.

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

Cómo funciona ProviderTestCase2

Pruebas un proveedor con una subclase ProviderTestCase2. Esta clase base extiende AndroidTestCase, por lo que proporciona el framework de prueba JUnit, así como métodos específicos de Android para probar los permisos de las aplicaciones. La característica más importante de esta clase es su inicialización, que crea el entorno de pruebas aislado.

Inicialización

La inicialización se lleva a cabo en el constructor ProviderTestCase2, que las subclases llaman en sus propios constructores. El constructor ProviderTestCase2 crea un objeto IsolatedContext que permite operaciones de archivos y bases de datos, pero elimina otras interacciones con el sistema Android. Las operaciones de archivo y base de datos se llevan a cabo en un directorio que es local para el dispositivo o emulador y que tiene un prefijo especial.

Luego, el constructor crea un MockContentResolver para usarlo como agente de resolución de la prueba.

Por último, el constructor crea una instancia del proveedor bajo evaluación. Este es un objeto ContentProvider normal, pero toma toda la información de su entorno de IsolatedContext, por lo que se restringe a trabajar en el entorno de prueba aislado. Todas las pruebas realizadas en la clase del caso de prueba se ejecutan en este objeto aislado.

Las pruebas de integración para proveedores de contenido se ejecutan de la misma manera que las pruebas de unidades instrumentadas.

Qué debes probar

Estas son algunas pautas específicas para probar los proveedores de contenido.

  • Prueba con los métodos del agente de resolución: Aunque puedes crear una instancia de un objeto del proveedor en ProviderTestCase2, siempre debes probar con un objeto del agente de resolución mediante el URI apropiado. Esto garantiza que pruebes el proveedor mediante la misma interacción que usaría una aplicación normal.
  • Prueba un proveedor público como un contrato: Si quieres que tu proveedor sea público y esté disponible para otras aplicaciones, debes probarlo como un contrato. A continuación, se incluyen algunos ejemplos de cómo hacerlo:
    • Prueba con constantes que tu proveedor expone públicamente. Por ejemplo, busca constantes que hagan referencia a nombres de columnas en una de las tablas de datos del proveedor. Estas siempre deben ser constantes que el proveedor defina de manera pública.
    • Prueba todos los URI que ofrece tu proveedor. Tu proveedor puede ofrecer varios URI, y cada uno hace referencia a un aspecto diferente de los datos.
    • Prueba los URIs no válidos. Las pruebas de unidades deben llamar deliberadamente al proveedor con un URI no válido y buscar errores. Un buen diseño de proveedor es arrojar una IllegalArgumentException para los URI no válidos.
  • Prueba las interacciones estándar del proveedor: La mayoría de los proveedores ofrecen seis métodos de acceso: query(), insert(), delete(), update(), getType() y onCreate(). Las pruebas deben verificar que todos estos métodos funcionen.
  • Prueba la lógica empresarial: Si el proveedor de contenido implementa la lógica empresarial, deberías probarla. La lógica empresarial incluye el manejo de valores no válidos, los cálculos financieros o aritméticos, la eliminación o la combinación de duplicados.