Según NSManagedObjectContext Class Documentation ...Core Unidad de Pruebas de datos - Sin saber cómo activar caso de error en executeFetchRequest: Error:
- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error
Return Value
An array of objects that meet the criteria specified by request fetched from the receiver and from the persistent stores associated with the receiver’s persistent store coordinator. If an error occurs, returns nil. If no objects match the criteria specified by request, returns an empty array.
Estoy tratando de crear una unidad de prueba para la situación "si un se produce un error, devuelve nil ".
Me gustaría evitar el uso de OCMock (o subclases de NSManagedObjectContext para reemplazar el método executeFetchRequest: error:) porque supongo que hay una manera fácil de garantizar la falla de este método. Hasta ahora mi prueba de la unidad dice ...
- (void)testReportingCoreDataErrorToDelegate
{
NSManagedObjectContext *badContext = [[NSManagedObjectContext alloc] init];
[bcc setManagedObjectContext:badContext];
[bcc fetchFromCoreData];
STAssertTrue([mockDelegate didReceiveCoreDataError], @"This never asserts, it fails because the fetch request couldn't find an entity name - i.e. no managed object model");
}
¿Hay una manera simple de activar una solicitud de recuperación devolviendo nil?
¡Muy listo! Tengo curiosidad de por qué no subclasificó 'NSManagedObjectContext' y anuló' executeFetchRequest: error: '. Esa ha sido la única solución que he encontrado porque tampoco he encontrado la manera de atraer orgánicamente el error. Subclases más anulación me dejó con un enfoque ligeramente más claro (aunque más limitado). – edelaney05
No subclasé el contexto directamente porque nada en Core Data es tan fácil. [NSManagedObjectContext executeFetchRequest: error] es procesado por [NSPersistentStoreCoordinator executeRequest: withContext: error:] que procesa [NSPersistentStore executeRequest: withContext: error:] en todas las tiendas actuales. Puede observar que la palabra "fetch" cae cuando se mueve al coordinador - las solicitudes de guardar y recuperar se manejan con el mismo método executeRequest: withContext: error :. Así que obtengo cobertura para probar contra guardar errores y buscar solicitudes definiendo ErrorProneStore. –
¡Gracias por la información! – edelaney05