Seguí this great article para entrar en Pruebas unitarias con respecto a los Datos principales. La configuración parece simple e involucra solo algunas líneas de código de vista.¿Cómo puedo decirle a MagicalRecord que no utilice los datos básicos basados en archivos sino una configuración de memoria?
- (void)setUp;
{
[MagicalRecord setDefaultModelWithClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown;
{
[MagicalRecord cleanUp];
}
- (void)testSomeCalculationOnMyEntity;
{
NSNumber *count = [MyEntity MR_numberOfEntities];
// STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}
@end
El problema es que cada vez que, por ejemplo, cheque por la cantidad de entidades en la memoria puesta en marcha de la base de datos llamando [MyEntity MR_numberOfEntities]
(como arriba), me da la cantidad de objetos, los cuales se almacenan en la configuración basada en archivos que son un par de miles de objetos. ¿Como sucedió esto? Me refiero a que la segunda línea en setUp
indica la memoria en uno, ¿no es así? Y este caso debería devolver 0 como la cantidad de objetos almacenados.
¡Gracias por cualquier sugerencia!
Editar:
@casademora me puso en el camino correcto. La siguiente configuración de trabajos funciona bien ahora.
- (void)setUp;
{
[MagicalRecord cleanUp]; // This solved the mystery.
// I don't now why I had to remove this line, though.
// [MagicalRecord setDefaultModelWithClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
- (void)tearDown;
{
[MagicalRecord cleanUp];
}
- (void)testSomeCalculationOnMyEntity;
{
NSNumber *count = [MyEntity MR_numberOfEntities];
// STAssert([testEntity customCalculation] == expectedValue, @"expected a good calculation");
}
@end
Gracias por su respuesta. La prueba que estoy ejecutando es la única. El objetivo de mis pruebas depende del objetivo de mi aplicación. En mi AppdeDegate, configuré la pila de datos centrales para usar un archivo. ¿Podría ser que este se cargue antes de las pruebas y que, por lo tanto, se use en lugar del nuevo en la memoria uno? Si es así, ¿cómo puedo evitar esto? – Aufwind
Gracias por ponerme en el camino correcto. Resolví este misterio llamando '[MagicalRecord cleanUp];' justo antes de '[MagicalRecord setupCoreDataStackWithInMemoryStore];' en el método '- (void) setUp;'. Tuve que eliminar '[MagicalRecord setDefaultModelFromClass: [self class]];'. Ver mi edición de la pregunta. – Aufwind
Guau, eso no debería haber sido necesario ... llamar a limpieza en el método tearDown debería haber sido suficiente. Esto es bastante extraño. – casademora