Ho seguito this great article per accedere al test dell'unità relativo ai dati principali. L'installazione sembra semplice e comporta solo alcune linee di vista del codice.Come posso dire a MagicalRecord di non utilizzare i dati base basati su file ma una configurazione in 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
Il problema è che ogni volta che ad esempio assegno per l'importo di entità nella memoria messa a punto di Core Data chiamando [MyEntity MR_numberOfEntities]
(come sopra), ottengo la quantità di oggetti, che sono memorizzati nell'impostazione basata su file, che sono un paio di migliaia di oggetti. Come succede? Intendo dire che la seconda riga in setUp
indica quella in memoria, vero? E questo caso dovrebbe restituire 0 come quantità di oggetti memorizzati.
Grazie per eventuali suggerimenti!
Edit:
@casademora mi ha messo sulla strada giusta. La seguente installazione di lavori funziona bene per me ora.
- (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
Grazie per la risposta. Il test che sto eseguendo è l'unico. L'obiettivo dei miei test dipende dall'obiettivo della mia applicazione. Nel mio AppdDelegate ho impostato il Core Data Stack per usare un file. Potrebbe essere che questo viene caricato prima dei test, e che quindi viene usato al posto del nuovo in memoria? Se sì, come posso evitare questo? – Aufwind
Grazie per avermi messo sulla strada giusta. Ho risolto questo mistero chiamando '[MagicalRecord cleanUp];' prima di '[MagicalRecord setupCoreDataStackWithInMemoryStore];' nel metodo '- (void) setUp;'. Ho dovuto rimuovere '[MagicalRecord setDefaultModelFromClass: [self class]];'. Vedi la mia modifica della domanda. – Aufwind
Wow, che non avrebbe dovuto essere necessario ... chiamare cleanUp nel metodo tearDown avrebbe dovuto essere sufficiente. Questo è abbastanza strano. – casademora