У меня есть приложение для iOS, которое использует Core Data вместе с отличным Magical Record для управления сохранением. Вот моя проблема:Тестирование модульного приложения iOS с основными данными и магическая запись
Наша существующая структура тестирования модулей использует стандартные тесты приложений на iOS. Я хочу запускать свои модульные тесты с чистым in-memory db для каждого теста. Я выполнил указания в this article, чтобы установить это с помощью Magical Record. Проблема возникает при выполнении тестов приложений. Так как тесты приложений сначала запускают пакет приложений, а затем набор тестовых модулей, мой обычный вызов для настройки базового стека данных вызывается до того, как у меня появится вызов для хранения в памяти.
Я гугле этот вопрос всю ночь, и нашел пару перспективных статей:
- http://blog.goosoftware.co.uk//2013/02/07/unit-testing-a-coredata-manager-class/
- How to use Core Data for Dependency Injection
Проблема с этим является то, что они используют одноэлементный объект доступа к данным как шлюз в свои основные вызовы данных. Мое приложение не настроено таким образом. Я использую вызовы в Magical Record для сбора и сохранения данных.
Кто-нибудь сталкивался с этой проблемой? Если да, то не хватает ли некоторых деталей, которые позволили бы мне поменять мою настройку данных на хранилище в памяти при выполнении моих тестов?
EDIT: Добавление кода
В моем приложении делегат, у меня есть это:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[MagicalRecord setupAutoMigratingCoreDataStack];
// Other setup code
return YES;
}
В каждом единичном тестовом классе, который имеет дело с основными данными, у меня есть это:
-(void)setUp{
[super setUp];
[MagicalRecord setDefaultModelFromClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
}
-(void)tearDown{
[MagicalRecord cleanUp];
[super tearDown];
}
Я вижу, что для каждого теста вызывается как код делегирования приложения, так и настройка/разрывы, но я не уверен, как создать стандартный стек данных ядра для tes ts использовать память в памяти. У меня также есть файл .xcdatamodel, добавленный к целевому объекту тестирования.
Есть некоторые примеры кода у вас есть или проект настройки, которые могут помочь уменьшить это? Я думаю, что вам не хватает одной вещи, но я понятия не имею, что это такое, не видя, что вы делаете. – casademora
@casademora - Добавлен код, иллюстрирующий, как я делаю вещи. Я также использую CocoaPods, чтобы вытащить магическую запись, не уверен, что это может иметь какое-либо отношение к проблеме. –
hrm, вам нужно запускать тесты приложений? В этом случае вам не нужно использовать тестовую настройку. Если вы используете логические тесты, настройка, указанная в сообщении в блоге, отлично работает. Кроме того, я ненавижу, что существует различие между прикладными и логическими тестами:/ – casademora