Cosa posso fare per ottenere una copertura di test su ContentProvider di ActiveAndroid in Robolectric? Questo semplice test fallisce.Test di ActiveAndroid con Robolectric
Il modello:
@Table(name = "Things")
public class Thing extends Model {
public Thing() {
super();
}
}
La prova:
@RunWith(RobolectricTestRunner.class)
public class ContentProviderTest {
@Test
public void itShouldQuery() throws Exception {
new Thing().save();
ContentResolver cr = new MainActivity().getContentResolver();
assertNotNull(
cr.query(Uri.parse("content://org.example/things"),
null, null, null, null));
}
}
La conseguente analisi dello stack:
java.lang.NullPointerException: null
at com.activeandroid.Cache.getTableInfo(Unknown Source)
at com.activeandroid.Model.<init>(Unknown Source)
at org.example.Thing.<init>(Thing.java:9)
at org.example.ProviderTest.itShouldQuery(ProviderTest.java:25)
Il contesto di applicazione dovrebbe essere ok. Per impostazione predefinita, Robolectric crea l'applicazione che appare nel manifest, che in questo caso è com.activeandroid.Application.
Quindi, sono perplesso sul perché la tabellaInfo in Cache non sia inizializzata. L'esecuzione normale dell'applicazione funziona correttamente.
Quale IDE stai utilizzando? C'è un bug aperto su una soluzione alternativa per eclipse, ma non intellij. https://github.com/pardom/ActiveAndroid/issues/63 – Joe
Funziona con Eclipse. Voglio 'mvn test'. –
Sì, avremo lo stesso problema perché Maven si inserisce in una cartella diversa da quella che ActiveAndroid si aspetta. Non dovrebbe essere troppo difficile cambiare ActiveAndroid per consentire di registrare i Modelli invece di trovarli automaticamente. – Joe