ProviderTestCase2.getProvider () es nulo

Estoy tratando de probar una clase ContentProvider, y no puedo hacer que funcione.

GetProvider () sigue devolviendo null, pero como entiendo del código ProviderTestCase2.setUp (), no debería hacerlo.

public class NotesProviderTest extends ProviderTestCase2<NotesProvider> { ... public NotesProviderTest() { super(NotesProvider.class, Contract.AUTHORITY); } @Override protected void setUp() throws Exception { super.setUp(); } public void testNoteProvider__inserts_a_valid_record() throws Exception { Note note = new Note(new JSONObject(simpleNoteJson)); NotesProvider provider = getProvider(); Uri insert = provider.insert(Note.URI, note.getContentValues()); assertEquals(1L, ContentUris.parseId(insert)); Cursor cursor = provider.query(Note.URI, null, null, new String[]{}, null); assertNotNull(cursor); cursor.close(); } } 

Nota: el proveedor funciona si se utiliza dentro de la aplicación.

Gracias por adelantado.

Acabo de ejecutar este problema yo mismo. Debe indicarle a AndroidJUnit4 que ejecute el método setUp con la anotación @Before. Si no lo hace, el método setUp no se llamará antes de que se ejecute la prueba de unidad.

El fragmento de código para reemplazar el método setUp en http://developer.android.com/training/testing/integration-testing/content-provider-testing.html es engañoso y no menciona que necesita una anotación @Before.

Pruebe lo siguiente:

 @Before @Override public void setUp() throws Exception { setContext(InstrumentationRegistry.getTargetContext()); super.setUp(); } 

Como parte del método setUp () se debe crear un MockContentResolver. Utilícelo para crear e inyectar al proveedor.

Vea la clase MockContentResolver: http://developer.android.com/reference/android/test/mock/MockContentProvider.html

Fuente del ejemplo: http://alvinalexander.com/java/jwarehouse/android/test-runner/src/android/test/ProviderTestCase2.java.shtml

Muestra parcial del ejemplo en el enlace anterior:

  @Override protected void setUp() throws Exception { super.setUp(); mResolver = new MockContentResolver(); final String filenamePrefix = "test."; RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( new MockContext2(), // The context that most methods are delegated to getContext(), // The context that file methods are delegated to filenamePrefix); mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); mProvider = mProviderClass.newInstance(); mProvider.attachInfo(mProviderContext, null); assertNotNull(mProvider); mResolver.addProvider(mProviderAuthority, getProvider()); } 
  • Envío de mayúsculas a un TextEdit durante pruebas instrumentadas
  • ClassNotFoundException durante el instrumento de prueba de Android
  • Problema con Android IAP, sin OrderID en el objeto de compra
  • Prueba de una biblioteca de Android con Robolectric
  • Destruye y reinicia la actividad con la biblioteca de soporte de pruebas
  • ¿Cómo puedo obtener identificadores, nombres o rutas x para elementos ui utilizados en una aplicación para móviles (Android / iOS) para pruebas de automatización móvil?
  • Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
  • Cómo probar la aplicación empresarial android en varios dispositivos
  • Prueba de AdMob antes de publicar
  • ApplicationTestCase obsoleto en el nivel 24 de API
  • ¿Por qué no hay instrumentación de prueba para BroadcastReceiver?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.