ios - testes 函数调用 AppDelegate + managed Object 时单元测试崩溃

标签 ios xcode unit-testing swift xctest

我有以下问题: 我正在快速编写一个应用程序。我有一个托管对象(称为类别)的类函数(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
}

当我运行该应用程序时,代码运行良好并按预期工作,但是当我运行该函数的单元测试时它崩溃了。

第一次出现以下错误:

AppDelegate error

出现在以下行中:

let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

当我继续执行程序时,它在获取 managedObjectContext 时崩溃,如下所示:

managedObjectContext Error - EXC_BAD_ACCESS

我试图找到解决方案或变通方法并尝试了以下方法:

UIApplication.sharedApplication().delegate as AppDelegate causes EXC_BAD_ACCESS using it on swift unit test

但是没有用。有人有可行的解决方案吗?

提前致谢,

最佳答案

正如堆栈跟踪所示,无条件转换(as AppDelegate 行)失败了。您链接到的问题包含此问题的解决方案。

我猜它对您不起作用的原因是您忘记从单元测试包目标中删除 AppDelegate.swift。假设您忘记了,您现在有两个 AppDelegate 定义:一个在您的单元测试包中,一个在您的应用程序包中。无条件转换失败,因为您试图将应用程序中定义的 AppDelegate 转换为单元测试包中定义的 AppDelegate。

要解决此问题,按住 Control 键并单击 AppDelegate.swift 并选择Show File Inspector,然后确保在Target Memebership 下唯一的复选框位于您的应用程序旁边,并且您的单元测试包旁边没有勾号。

enter image description here

您在托管对象上下文中看到的第二个问题只是第一个问题的结果。

关于ios - testes 函数调用 AppDelegate + managed Object 时单元测试崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28505388/

相关文章:

ios - 如何选择、取消选择和单个表格单元格

使用 --process-isolation 时出现 fatal error 后 PHPUnit 无法继续测试

ios - 代码=134110 - 强制目标属性上缺少属性值的验证错误

ios - 如何在一行内垂直对齐两个 UILabel?

ios - Collection View 中的奇怪行为

iOS:一次设置多个按钮的透明度

android - 如何在 android 中使用 groovy 制作 integrationTest 源集?

ios - 使用 Xcode 7 UI 自动化模拟对象

ios - 使用 iOS 和 Swift 访问深度嵌套的 json 数据的最简单方法是什么?

ios - 禁用 UITableView 离屏渲染