Fornitori di contenuti di prova

Se stai implementando un fornitore di contenuti per archiviare e recuperare i dati o per renderli accessibili ad altre app, devi testare il tuo provider per assicurarti che non comporti un comportamento imprevisto. Questa lezione descrive come testare i fornitori di contenuti pubblici ed è valida anche per i provider che mantieni privati per la tua app.

Creare test di integrazione per i fornitori di contenuti

I fornitori di contenuti ti consentono di accedere ai dati utente effettivi, perciò è importante verificare di testare il fornitore di contenuti in un ambiente di test isolato. Questo approccio consente di eseguire solo le dipendenze dei dati impostate esplicitamente nello scenario di test. Inoltre, i test non modificano i dati utente effettivi. Ad esempio, dovresti evitare di scrivere un test che non va a buon fine perché erano rimasti dei dati da un test precedente. Analogamente, il test dovrebbe evitare di aggiungere o eliminare dati di contatto effettivi in un provider.

Per testare il tuo fornitore di contenuti in modo isolato, utilizza la classe ProviderTestCase2. Questa classe consente di utilizzare classi di oggetti fittizi di Android come IsolatedContext e MockContentResolver per accedere alle informazioni di file e database senza influire sui dati utente effettivi.

Il test di integrazione deve essere scritto come una classe di test JUnit 4. Per saperne di più sulla creazione di classi di test JUnit 4 e sull'utilizzo delle asserzioni JUnit 4, consulta Creare una classe di test delle unità locali.

Per creare un test di integrazione per il tuo fornitore di contenuti, devi eseguire questi passaggi:

  1. Crea la tua classe di test come sottoclasse di ProviderTestCase2.
  2. Specifica la classe AndroidJUnitRunner fornita da AndroidX Test come esecutore del test predefinito.
  3. Imposta l'oggetto Context dalla classe ApplicationProvider. Vedi lo snippet di seguito per un esempio.

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

Come funziona ProviderTestCase2

Esegui il test di un provider con una sottoclasse di ProviderTestCase2. Questa classe base estende AndroidTestCase, quindi fornisce il framework di test JUnit e metodi specifici per Android per testare le autorizzazioni delle applicazioni. La caratteristica più importante di questa classe è la sua inizializzazione, che crea l'ambiente di test isolato.

Inizializzazione

L'inizializzazione viene eseguita nel costruttore di ProviderTestCase2, che le sottoclassi richiamano i propri costruttori. Il costruttore ProviderTestCase2 crea un oggetto IsolatedContext che consente le operazioni su file e database, ma esclude altre interazioni con il sistema Android. Le operazioni su file e database vengono eseguite in una directory locale del dispositivo o dell'emulatore, con un prefisso speciale.

Il costruttore crea quindi un MockContentResolver da utilizzare come resolver per il test.

Infine, il costruttore crea un'istanza del provider in fase di test. Si tratta di un normale oggetto ContentProvider, ma prende tutte le informazioni relative all'ambiente da IsolatedContext, il che è limitato al funzionamento nell'ambiente di test isolato. Tutti i test effettuati nella classe dello scenario di test vengono eseguiti su questo oggetto isolato.

I test di integrazione per i fornitori di contenuti vengono eseguiti allo stesso modo dei test delle unità strumentate.

Che cosa verificare

Di seguito sono riportate alcune linee guida specifiche per i test dei fornitori di contenuti.

  • Esegui test con metodi resolver: anche se puoi creare un'istanza di un oggetto provider in ProviderTestCase2, devi sempre eseguire il test con un oggetto resolver utilizzando l'URI appropriato. In questo modo ti assicuri di testare il provider eseguendo la stessa interazione che potrebbe utilizzare un'applicazione normale.
  • Prova un provider pubblico come contratto: se vuoi che il tuo provider sia pubblico e disponibile per altre applicazioni, dovresti testarlo come contratto. Ecco alcuni esempi di come farlo:
    • Esegui dei test con costanti che il tuo provider espone pubblicamente. Ad esempio, cerca le costanti che fanno riferimento ai nomi di colonna in una delle tabelle di dati del provider. Dovrebbero essere sempre costanti definite pubblicamente dal fornitore.
    • Testa tutti gli URI offerti dal tuo provider. Il tuo provider può offrire diversi URI, ognuno dei quali fa riferimento a un aspetto diverso dei dati.
    • Verifica URI non validi. I test delle unità devono chiamare deliberatamente il provider con un URI non valido e cercare eventuali errori. Una buona progettazione del provider è quella di generare un IllegalArgumentException per gli URI non validi.
  • Testa le interazioni standard del provider: la maggior parte dei provider offre sei metodi di accesso: query(), insert(), delete(), update(), getType() e onCreate(). I test devono verificare che tutti questi metodi funzionino.
  • Testa la logica di business: se il fornitore di contenuti implementa la logica di business, devi testarla. La logica di business include la gestione di valori non validi, calcoli finanziari o aritmetici, l'eliminazione o la combinazione di duplicati.