只是给出一些背景知识:我最近开始为其他公司开发和维护的代码进行单元测试。我的目的是在不触及应用程序代码的情况下编写测试用例。
现在遇到问题:如何在单元测试的目标中获得对应用程序的CoreData堆栈的引用。每次服务调用后,响应都存储在CoreData的持久存储中。我想从单元测试类中验证它。我尝试从单元测试中访问CoreData堆栈,但由于某种原因,在代码编译后它将变为nil。这是我的setUp方法中的一段代码。
- (void)setUpDataBase
{
RZCoreDataStack *stack = [[RZCoreDataStack alloc] initWithModelName:@"Skillsoft"
configuration:nil
storeType:NSSQLiteStoreType
storeURL:nil
options:RZCoreDataStackOptionDeleteDatabaseIfUnreadable];
NSAssert(stack != nil, @"Failed to create CoreData stack");
stack.mainManagedObjectContext.parentContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy;
[RZCoreDataStack setDefaultStack:stack];
RZCoreDataStack *setStack = [RZCoreDataStack defaultStack];
NSLog(@"setStack Details >>> %@",setStack.description);
}
+ (RZCoreDataStack *)defaultStack
{
if ( s_defaultStack == nil ) {
RZVLogInfo(@"The default stack has been accessed without being configured. Creating a new default stack with the default options.");
// // s_defaultStack = [[RZCoreDataStack alloc] initWithModelName:nil
// configuration:nil
s_defaultStack = [[RZCoreDataStack alloc] initWithModelName:@"Skillsoft"
configuration:nil
storeType:NSSQLiteStoreType
storeURL:nil
options:RZCoreDataStackOptionDeleteDatabaseIfUnreadable];
s_defaultStack.mainManagedObjectContext.parentContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy;
}
return s_defaultStack;
}`
默认堆栈是一个静态变量,并且是nil ...我假设在应用程序范围内创建了2组静态变量,而在单元测试范围内创建了其他一组...我只想编写单元测试UIView控制器中的方法的情况,该控制器又在另一个层的范围内进行服务调用。我想通过在应用程序中获取对CoreData的引用来验证它,并检查数据是否正确持久...正确的方法是什么......
我已经看到了一些StackOverflow帖子,建议在setUp方法中创建一个自己的CoreData堆栈,但是我需要将数据保存在同一个堆栈中,此时此刻我不想做。
我可以看到,当您运行单元测试用例时会调用应用程序委托,而单元测试用例又会在我的项目中初始化很多对象。为了避免这种情况,我在主文件本身进行了更改以调用测试应用委托代替基于目标的应用程序的主委托..所以对象的所有初始化都在单元测试中完成..
请建议我正确的方法......
P.S对于CoreData访问,该应用程序使用名为RZVinyl的第三方库,这对我来说更复杂..
P.P.S我的英语很弱,所以如果我的解释不清楚,请告诉我。我将更新问题陈述..