aggiungo questa voce come penso che può aiutare i programmatori che vogliono testare il proprio fornitore di contenuti.
Immaginate che il vostro fornitore di contenuti sia chiamato MyProvider e che abbiate una classe di contratto chiamata MyProviderContract che definisce alcune costanti.
Prima di tutto, si scriverà una classe di test denominata MyProviderTestCase
che eredita da ProviderTestCase2<MyProvider>
. Dovrete definire un costruttore che chiamerà il super
costruttore:
public MyProviderTestCase() {
super(MyProvider.class, MyProviderContract.AUTHORITY);
}
Poi, invece di utilizzare direttamente il vostro fornitore (evitare l'uso di getProvider()
come utenti del fornitore di contenuti non accedervi direttamente), utilizzare il getMockContentResolver()
per ottenere un riferimento a un resolver di contenuto e quindi chiamare i metodi di questo risolutore di contenuto (query
, insert
, ecc.). Nel seguente codice, indico come testare il metodo insert
.
public void testInsert() {
Uri uri = MyProviderContract.CONTENT_URI;
ContentValues values = new ContentValues();
values.put(MyProviderContract.FIELD1, "value 1");
values.put(MyProviderContract.FIELD2, "value 2");
Uri resultingUri = getMockContentResolver().insert(uri, values);
// Then you can test the correct execution of your insert:
assertNotNull(resultingUri);
long id = ContentUris.parseId(resultingUri);
assertTrue(id > 0);
}
Quindi è possibile aggiungere il numero di metodi di prova come si vuole, utilizzando un risolutore di contenuti al posto del tuo fornitore di contenuti direttamente, come farebbe utenti di un fornitore di contenuti.
Non c'è molto codice di esempio sulla classe ProviderTestCase2 su Internet. Questo è molto utile. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
In [Documentazione Android] (http://developer.android.com/tools/testing/contentprovider_testing.html#WhatToTest), consigliano di non utilizzare direttamente il fornitore di contenuti e di passare invece a un risolutore di contenuti. Basta leggere il mio post per vedere un esempio più adeguato di come testare un fornitore di contenuti. – eternay