2014-10-14 4 views
0

Я начал тестировать подклассы NSManagedObject, и у меня возникает проблема с непоследовательной экономией результатов и выборкой в ​​одном из тестовых случаев.Непоследовательные результаты CoreData UnitTest

Моя настройка довольно проста - для тестирования у меня есть постоянный магазин в памяти. Я держусь за ссылку через тест.

На установке тестирования, очистить сохраняющийся магазин:

- (void)setUp { 
    [super setUp]; 

    if(!self.manager){ 
     self.manager = [DataManager inMemoryManager]; 
    } 
    [self.manager.managedObjectContext reset]; 
} 

Тестовый пример прост: 1. считывать данные из файла JSON, разобрать и настроить мои объекты 2. Сохранить 3. Создать запрос на выборку по внешнему идентификатору объекта (должен быть только один)

При запуске тестового примера сам (или только этот класс испытаний) я получаю 1 результат, как и ожидалось. Однако, выполняя ВСЕ модульные тесты и классы, он производит 3 результата из выборки. Иногда отношения прекрасны (проходят), а в других случаях они терпят неудачу (нет отношений).

Поскольку я каждый раз перезагружаю контекст при настройке, у меня должен быть пустой лист для каждого теста, не так ли?

Вместо этого, я думаю, что я получаю остатки от другого теста, загрязняющего образец данных, но понятия не имею, как его исправить.


В случае, если вы заинтересованы в надуманными результаты:

<__NSArrayM 0x7f9b2842c650>(
<MyObject: 0x7f9b28435430> (entity: MyObject; id: 0x7f9b28440370 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p11> ; data: { 
    externalID = 222abc; 
    theChildren =  (
     "0x7f9b2843f020 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p9>", 
     "0x7f9b2843fec0 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/ChildObject/p12>" 
    ); 
}), 
< MyObject: 0x7f9b28440c00> (entity: MyObject; id: 0x7f9b28731890 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p5> ; data: <fault>), 
< MyObject: 0x7f9b28440c60> (entity: MyObject; id: 0x7f9b28729490 <x-coredata://9CE4448C-6595-47FC-A189-58A83F708D96/MyObject/p3> ; data: <fault>) 
) 

ответ

0

setUp вызывается только один раз в тестовый набор, вам необходимо вызвать сброс перед каждым испытанием. Я бы рекомендовал переключиться на Specta и использовать его для сброса beforeEach. (example - хотя и не с конкурсом управляемого объекта)

+0

Я думал, что может быть, но нашел это объяснение. http://stackoverflow.com/a/21040654/694080 – Cameron

+0

Даже при запуске clear на настройке AND teardown я все еще сталкиваюсь с проблемами. Я также пробовал очистить до и после в каждом тестовом случае без исправления. Если я прокомментирую другие тесты, которые используют '[context save: & error]' (в некоторых других тестовых классах), это кажется прекрасным. Что, кажется, помогает сделать мой inMemoryManager НЕ одиночным, поэтому каждый тест получает свой собственный экземпляр (лучше или хуже). Кажется не звук, но приемлемо ли это для такого случая? – Cameron

+0

Почему это был сингл в первую очередь? – quellish

Смежные вопросы