Se stai implementando un fornitore di contenuti per archiviare e recuperare dati o per rende i dati accessibili ad altre app, dovresti testare il tuo provider per assicurarti non si comporta in modo inaspettato. Questa lezione descrive come eseguire un test i fornitori di contenuti ed è valido anche per i fornitori per i quali mantieni la privacy la tua app.
Creare test di integrazione per i fornitori di contenuti
Poiché i fornitori di contenuti ti consentono di accedere ai dati utente effettivi, è importante verificare di testare il fornitore di contenuti in un ambiente di test isolato. Questo consente di eseguire solo le dipendenze dei dati impostate in modo esplicito caso di test. Ciò significa anche che i test non modificano i dati utente effettivi. Per Ad esempio, dovresti evitare di scrivere un test che ha esito negativo perché sono rimasti dati rispetto a un test precedente. Allo stesso modo, il test non deve essere aggiunto o eliminato i dati di contatto effettivi di un provider.
Per testare il tuo fornitore di contenuti in modo isolato, utilizza ProviderTestCase2
. Questa classe ti consente di utilizzare classi di oggetti fittizi di Android come
IsolatedContext
e MockContentResolver
per accedere ai file e
informazioni del database senza
influire sui dati utente effettivi.
Il test di integrazione deve essere scritto come classe di test JUnit 4. Per scoprire di più sulla creazione di classi di test JUnit 4 e sull'utilizzo delle asserzioni JUnit 4, consulta Creare un Classe di test dell'unità locale.
Per creare un test di integrazione per il tuo fornitore di contenuti, devi eseguire questi passaggi passaggi:
- Crea la classe di test come sottoclasse di
ProviderTestCase2
. - Specifica la classe
AndroidJUnitRunner
fornita da AndroidX Test come runner di test predefinito. - Imposta l'oggetto
Context
dalla classeApplicationProvider
. Consulta le 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
Testi un provider con una sottoclasse ProviderTestCase2
. Questa classe base
estende AndroidTestCase
, quindi fornisce il framework di test JUnit come
nonché metodi specifici di Android per testare le autorizzazioni delle applicazioni. Il più
una caratteristica importante di questa classe è la sua inizializzazione, che crea
un ambiente di test isolato.
Inizializzazione
L'inizializzazione viene eseguita nel costruttore per ProviderTestCase2
,
che le sottoclassi richiamano i propri costruttori. ProviderTestCase2
crea un oggetto IsolatedContext
che consente i file
operazioni di database ma interrompe altre interazioni con il sistema Android.
Le operazioni su file e database si svolgono in una directory
locale rispetto al dispositivo o all'emulatore e ha un prefisso speciale.
Il costruttore crea quindi un MockContentResolver
da utilizzare come resolver
per il test.
Infine, il costruttore crea un'istanza del provider sottoposto a test. Questo è
un oggetto ContentProvider
normale, ma prende tutto il suo ambiente
informazioni da IsolatedContext
, pertanto è limitato all'uso
nell'ambiente di test isolato. Tutti i test effettuati nell'esecuzione della classe dello scenario di test
rispetto all'oggetto isolato.
Esegui i test di integrazione per i fornitori di contenuti allo stesso modo in cui vengono eseguiti delle unità di misura.
Cosa verificare
Di seguito sono riportate alcune linee guida specifiche per testare i fornitori di contenuti.
- Esegui test con metodi resolver: anche se puoi creare un'istanza di un provider
oggetto
in
ProviderTestCase2
, devi sempre eseguire il test con un oggetto resolver utilizzando l'URI appropriato. In questo modo avrai la certezza di testare il provider eseguendo la stessa interazione utilizzata da un'applicazione normale. - Testare un fornitore pubblico come contratto: se vuoi che il tuo fornitore venga
pubblica e disponibile per altre applicazioni, dovresti testarla come un contratto.
Ecco alcuni esempi:
- Esegui il test con le costanti esposte pubblicamente dal tuo provider. Ad esempio, guarda per le costanti che fanno riferimento ai nomi delle colonne in una delle tabelle di dati del provider. Devono essere sempre costanti definite pubblicamente dal provider.
- Testa tutti gli URI offerti dal tuo provider. Il tuo fornitore potrebbe offrire diverse URI, ognuno dei quali fa riferimento a un aspetto diverso dei dati.
- Verifica gli URI non validi. I test delle unità devono chiamare deliberatamente il fornitore con
un URI non valido e cerca gli errori. Un buon fornitore in progettazione è
IllegalArgumentException
per URI non validi.
- Verifica le interazioni standard con i fornitori: la maggior parte dei fornitori offre sei tipi di accesso
metodi:
query()
,insert()
,delete()
,update()
,getType()
eonCreate()
. I test dovrebbero verificare che tutti questi metodi funzionino. - Verifica la logica di business: se il fornitore di contenuti implementa la logica di business, tu dovresti testarlo. La logica di business include la gestione di valori non validi, dati finanziari o calcoli aritmetici, eliminazione o combinazione di duplicati.