Ios 当被测函数调用AppDelegate+;管理对象
我有以下问题: 我正在用swift编写一个应用程序。我有一个托管对象(称为Category)的类函数(mapCategories),我想对其进行单元测试(XCTest) myCategoryFunction获取NSDictionary并将其内容映射到类别列表[Category],然后返回它。要进行映射,我必须使用以下代码创建类别对象:Ios 当被测函数调用AppDelegate+;管理对象,ios,xcode,unit-testing,swift,xctest,Ios,Xcode,Unit Testing,Swift,Xctest,我有以下问题: 我正在用swift编写一个应用程序。我有一个托管对象(称为Category)的类函数(mapCategories),我想对其进行单元测试(XCTest) myCategoryFunction获取NSDictionary并将其内容映射到类别列表[Category],然后返回它。要进行映射,我必须使用以下代码创建类别对象: class func mapCategories(myDictionary: 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并选择ShowFile Inspector,然后确保在Target Membership下,唯一的复选框位于应用程序旁边,而单元测试包旁边没有复选框
您在托管对象上下文中看到的第二个问题只是第一个问题的结果。使用swift2,您不需要将方法和类公开,您可以使用
@testable import {main module}
唯一需要注意的是,您需要将主机应用程序属性指向主应用程序包,并在测试目标生成设置下切换
Enable Testability=Yes
。找到解决方案了吗?我遇到了同样的问题…不,我没有:(,这就是为什么我给这个问题增加了一个悬赏,你把所有的CoreData模型都添加到你的测试包中了吗?是的,它没有解决问题。它最终成功了,但我必须将我想要进行单元测试的所有方法和类都设置为公共的,这不是一个好的解决方案,我会暂时这样做,直到找到更好的解决方案。