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.
- Java y la metodología de prueba de Android
- Prueba de un servicio de accesibilidad de Android?
- ¿Cómo enviar eventos clave a un emulador sin cabeza en una prueba de instrumentación?
- ¿Cómo puedo ejecutar el código en el hilo de la interfaz de usuario en una prueba de Android JUnit sin una actividad?
- Prueba de suscripción en Android: elemento no encontrado
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.
- Soluciones actuales para probar aplicaciones de Android
- Prueba de un ContentProvider personalizado en Android
- Optimizar el esfuerzo de prueba de Android
- Soft teclado no está presente, no se puede ocultar el teclado - Appium android
- Uso de la actividad de no producción para probar con Android Studio
- Cómo detener y reiniciar una actividad en una prueba de instrumentación de Android?
- ¿Cómo puedo ejecutar una sola prueba con gradle android
- Cómo inyectar el evento de clic con Android UiAutomation.injectInputEvent
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()); }
- No se puede lanzar el proyecto de la biblioteca de Android?
- Quiero una imagen dentro de SimpleAdapter?