Fournisseurs de contenu de test

Si vous mettez en œuvre un fournisseur de contenu pour stocker et récupérer des données ou pour les rendre accessibles à d'autres applications, vous devez tester votre fournisseur pour vous assurer qu'il ne se comporte pas de manière inattendue. Cette leçon explique comment tester des fournisseurs de contenu public. Elle s'applique également aux fournisseurs que vous définissez comme privés pour votre propre application.

Créer des tests d'intégration pour les fournisseurs de contenu

Les fournisseurs de contenu vous permettent d'accéder à des données utilisateur réelles. Il est donc important de vous assurer de tester le fournisseur de contenu dans un environnement de test isolé. Cette approche vous permet de ne travailler qu'avec des dépendances de données définies explicitement dans le scénario de test. Cela signifie également que vos tests ne modifient pas les données utilisateur réelles. Par exemple, vous devez éviter d'écrire un test qui échoue en raison de données restantes dans un test précédent. De même, votre test doit éviter d'ajouter ou de supprimer des coordonnées réelles dans un fournisseur.

Pour tester votre fournisseur de contenu de manière isolée, utilisez la classe ProviderTestCase2. Cette classe vous permet d'utiliser des classes d'objets fictives Android telles que IsolatedContext et MockContentResolver pour accéder aux informations sur les fichiers et la base de données sans affecter les données utilisateur réelles.

Votre test d'intégration doit être écrit sous la forme d'une classe de test JUnit 4. Pour en savoir plus sur la création de classes de test JUnit 4 et l'utilisation d'assertions JUnit 4, consultez la page Créer une classe de test d'unité locale.

Pour créer un test d'intégration pour votre fournisseur de contenu, procédez comme suit:

  1. Créez votre classe de test en tant que sous-classe de ProviderTestCase2.
  2. Spécifiez la classe AndroidJUnitRunner fournie par AndroidX Test en tant qu'exécuteur de test par défaut.
  3. Définissez l'objet Context à partir de la classe ApplicationProvider. Consultez l'extrait ci-dessous pour obtenir un exemple.

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());
}

Fonctionnement de ProviderTestCase2

Vous allez tester un fournisseur avec une sous-classe de ProviderTestCase2. Cette classe de base étend AndroidTestCase. Elle fournit donc le framework de test JUnit, ainsi que des méthodes spécifiques à Android pour tester les autorisations des applications. La fonctionnalité la plus importante de cette classe est son initialisation, qui crée l'environnement de test isolé.

Initialisation

L'initialisation est effectuée dans le constructeur de ProviderTestCase2, que les sous-classes appellent dans leurs propres constructeurs. Le constructeur ProviderTestCase2 crée un objet IsolatedContext qui autorise les opérations de fichiers et de base de données, mais qui bouchon les autres interactions avec le système Android. Les opérations sur les fichiers et la base de données ont elles-mêmes lieu dans un répertoire local de l'appareil ou de l'émulateur et doté d'un préfixe spécial.

Le constructeur crée ensuite un MockContentResolver à utiliser comme résolveur pour le test.

Enfin, le constructeur crée une instance du fournisseur testé. Il s'agit d'un objet ContentProvider normal, mais il reçoit toutes les informations de son environnement de IsolatedContext. Il est donc limité au fonctionnement dans l'environnement de test isolé. Tous les tests effectués dans la classe du scénario de test s'exécutent sur cet objet isolé.

Les tests d'intégration pour les fournisseurs de contenu s'exécutent de la même manière que les tests unitaires instrumentés.

Que faut-il tester ?

Voici quelques consignes spécifiques pour tester les fournisseurs de contenu.

  • Effectuer des tests avec des méthodes de résolution: même si vous pouvez instancier un objet de fournisseur dans ProviderTestCase2, vous devez toujours effectuer un test avec un objet de résolveur utilisant l'URI approprié. Cela vous permet de tester le fournisseur en effectuant la même interaction qu'une application standard.
  • Testez un fournisseur public en tant que contrat: si vous souhaitez que votre fournisseur soit public et accessible à d'autres applications, vous devez le tester en tant que contrat. Voici quelques exemples de la marche à suivre :
    • Effectuez des tests avec des constantes que votre fournisseur expose publiquement. Par exemple, recherchez les constantes faisant référence à des noms de colonnes dans l'une des tables de données du fournisseur. Il doit toujours s'agir de constantes définies publiquement par le fournisseur.
    • Testez tous les URI proposés par votre fournisseur. Votre fournisseur peut proposer plusieurs URI, chacun faisant référence à un aspect différent des données.
    • Testez les URI non valides. Vos tests unitaires doivent délibérément appeler le fournisseur avec un URI non valide et rechercher les erreurs. Une bonne conception de fournisseur consiste à générer une exception IllegalArgumentException pour les URI non valides.
  • Testez les interactions standards des fournisseurs : la plupart des fournisseurs proposent six méthodes d'accès (query(), insert(), delete(), update(), getType() et onCreate()). Vos tests doivent vérifier que toutes ces méthodes fonctionnent.
  • Tester la logique métier: si le fournisseur de contenu implémente la logique métier, vous devez la tester. La logique métier comprend le traitement des valeurs non valides, les calculs financiers ou arithmétiques, l'élimination ou la combinaison des doublons.