Я начал тестировать подклассы 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>)
)
Я думал, что может быть, но нашел это объяснение. http://stackoverflow.com/a/21040654/694080 – Cameron
Даже при запуске clear на настройке AND teardown я все еще сталкиваюсь с проблемами. Я также пробовал очистить до и после в каждом тестовом случае без исправления. Если я прокомментирую другие тесты, которые используют '[context save: & error]' (в некоторых других тестовых классах), это кажется прекрасным. Что, кажется, помогает сделать мой inMemoryManager НЕ одиночным, поэтому каждый тест получает свой собственный экземпляр (лучше или хуже). Кажется не звук, но приемлемо ли это для такого случая? – Cameron
Почему это был сингл в первую очередь? – quellish