我有以下问题: 我正在快速编写一个应用程序。我有一个托管对象(称为类别)的类函数(mapCategories),我想对其进行单元测试(XCTest)。
myCategoryFunction 获取一个 NSDictionary 并将其内容映射到类别列表 [Category] 中并返回它。要进行映射,我必须使用以下代码创建类别对象:
class func mapCategories(myDictionary: NSDictionary!) -> [Category]{
var categories: [Category] = []
/*
... some code here.
*/
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let managedObjectContext = appDelegate.managedObjectContext
let entityDescription = NSEntityDescription.entityForName("Category", inManagedObjectContext: managedObjectContext!)
var category = Category(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
/*
... some code here.
*/
return Categories
}
当我运行该应用程序时,代码运行良好并按预期工作,但是当我运行该函数的单元测试时它崩溃了。
第一次出现以下错误:
出现在以下行中:
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
当我继续执行程序时,它在获取 managedObjectContext 时崩溃,如下所示:
我试图找到解决方案或变通方法并尝试了以下方法:
但是没有用。有人有可行的解决方案吗?
提前致谢,
最佳答案
正如堆栈跟踪所示,无条件转换(as AppDelegate 行)失败了。您链接到的问题包含此问题的解决方案。
我猜它对您不起作用的原因是您忘记从单元测试包目标中删除 AppDelegate.swift。假设您忘记了,您现在有两个 AppDelegate 定义:一个在您的单元测试包中,一个在您的应用程序包中。无条件转换失败,因为您试图将应用程序中定义的 AppDelegate 转换为单元测试包中定义的 AppDelegate。
要解决此问题,按住 Control 键并单击 AppDelegate.swift 并选择Show File Inspector,然后确保在Target Memebership 下唯一的复选框位于您的应用程序旁边,并且您的单元测试包旁边没有勾号。
您在托管对象上下文中看到的第二个问题只是第一个问题的结果。
关于ios - testes 函数调用 AppDelegate + managed Object 时单元测试崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28505388/