Fournisseurs de contenu de test

Si vous implémentez un fournisseur de contenu pour stocker et récupérer des données ou rendre les données accessibles à d'autres applications, vous devez tester votre fournisseur pour vous assurer que il ne se comporte pas de manière inattendue. Cette leçon explique comment tester des fournisseurs de contenu. Elle s'applique également aux fournisseurs auxquels vous ne communiquez 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 tester le fournisseur de contenu dans un environnement de test isolé. Ce vous permet de ne vous exécuter que sur 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. Pour exemple, vous devez éviter d'écrire un test qui échoue parce qu'il reste des données d'un test précédent. De même, évitez d'ajouter ou de supprimer les coordonnées réelles d'un fournisseur.

Pour tester votre fournisseur de contenu de façon isolée, utilisez le ProviderTestCase2. . Cette classe vous permet d'utiliser des classes d'objets fictives Android telles que IsolatedContext et MockContentResolver pour accéder aux fichiers et les informations de 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 section Créer une classe de test unitaire local.

Pour créer un test d'intégration pour votre fournisseur de contenu, vous devez effectuer les opérations suivantes : étapes:

  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 le ci-dessous pour 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 testez un fournisseur avec une sous-classe de ProviderTestCase2. Cette classe de base étend AndroidTestCase afin de fournir le framework de test JUnit en tant que ainsi que des méthodes spécifiques à Android pour tester les autorisations des applications. Les plus la caractéristique la plus importante de cette classe est son initialisation, qui crée dans un environnement de test isolé.

Initialisation

L'initialisation est effectuée dans le constructeur de ProviderTestCase2. que les sous-classes appellent dans leurs propres constructeurs. ProviderTestCase2 crée un objet IsolatedContext qui autorise les fichiers les opérations de base de données, mais bouchons les autres interactions avec le système Android. Les opérations de fichiers et de base de données sont effectuées dans un répertoire local à l'appareil ou à l'émulateur et possède 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é. C'est un objet ContentProvider normal, mais qui prend tout son environnement informations de IsolatedContext. Il est donc limité au travail 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é.

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

Que faut-il tester ?

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

  • Tester avec des méthodes de résolveur: même si vous pouvez instancier un fournisseur objet dans ProviderTestCase2, vous devez toujours effectuer le test avec un objet résolveur en utilisant l'URI approprié. Vous vous assurez ainsi de tester le fournisseur en effectuant la même interaction qu'une application classique.
  • Tester un fournisseur public sous forme de contrat: si vous souhaitez que votre fournisseur soit public et disponible pour d'autres applications, vous devez le tester en tant que contrat. Voici quelques exemples de la façon de procéder: <ph type="x-smartling-placeholder">
      </ph>
    • Effectuez un test avec des constantes que votre fournisseur expose publiquement. Par exemple, regardez pour les constantes qui font référence aux 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. Il se peut que votre fournisseur propose plusieurs URI, chacun faisant référence à un aspect différent des données.
    • Testez les URI non valides. Vos tests unitaires doivent appeler délibérément le fournisseur avec un URI non valide et recherchez les erreurs. Une bonne conception de fournisseur consiste IllegalArgumentException pour les URI non valides.
  • Testez les interactions standards avec les fournisseurs: la plupart des fournisseurs proposent six accès méthodes: 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 le tester. La logique métier consiste à gérer les valeurs non valides, les calculs arithmétiques, l'élimination ou la combinaison de doublons.