Unit testing 在XCode 7 Beta/Swift 2中对核心数据进行单元测试 简言之:
我正试图在XCode 7/Swift 2中为核心数据模型编写一个单元测试。但是,一个简单的测试,例如测试模型中的行数是否等于我知道的行数,失败了(我知道只有一行,但测试没有看到)。我最好的猜测是,我得到的是一个不同的(干净的?)版本的Unit testing 在XCode 7 Beta/Swift 2中对核心数据进行单元测试 简言之:,unit-testing,core-data,swift2,xcode7,Unit Testing,Core Data,Swift2,Xcode7,我正试图在XCode 7/Swift 2中为核心数据模型编写一个单元测试。但是,一个简单的测试,例如测试模型中的行数是否等于我知道的行数,失败了(我知道只有一行,但测试没有看到)。我最好的猜测是,我得到的是一个不同的(干净的?)版本的managedObjectContext,但我不知道如何获得与应用程序相同的版本。除了下面描述的技术(按照Andrew Bancroft网站上的链接说明),我还尝试将应用程序委托添加到SOTestTests,并获得managedObjectContext,如下所示
managedObjectContext
,但我不知道如何获得与应用程序相同的版本。除了下面描述的技术(按照Andrew Bancroft网站上的链接说明),我还尝试将应用程序委托添加到SOTestTests,并获得managedObjectContext
,如下所示
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
…但我随后得到一个错误,即XCode[c]不能将类型为'SOTest.AppDelegate'(0x25bb8)的值强制转换为'sotests.AppDelegate'(0x2c7bb78)。
长格式:
以下是设置我能想到的最小可复制示例的步骤:
实体
(人
)和一个属性
(名称
,类型字符串
)<代码>人员是唯一的,名称
是非可选的Person.swift
中注释掉@objc(Person)
,以避免生成错误。)unique
属性而导致冲突错误。)下面是执行此操作的ViewController
:Person
子类文件添加到SOTestTests
(meta,我知道),根据的(优秀)站点上的示例设置managedObjectContext
(使用mods for Swift 2),并编写测试检查,如果有一行:sotests
创建新方案,并将SOTest.app
可执行文件添加到运行方案中ViewController
类打印出一行,但是测试打印出零行,测试失败
知道我做错了什么吗?只需导入实际的项目即可访问AppDelegate和其他类
@testable import SOTest
无需将所有内容添加到测试目标。只需导入实际项目即可访问AppDelegate和其他类
@testable import SOTest
无需将所有内容添加到测试目标。如果导入
SOTest
并让managedObjectContext=(UIApplication.sharedApplication().delegate as!SOTest.AppDelegate)。managedObjectContext
,则在普通项目中,模块SOTest中没有名为AppDelegate的类型,它与您的确切托管对象上下文行一起工作,不会出现错误。请注意,最新的Xcode会自动执行上述导入,如下所示:@testable import-SOTest
。将@testable import-SOTest
添加到我的SOTestTests
类中完成了这项任务。由于某种原因,它无法将数组强制转换为[Person]
(我不得不将其更改为[NSManagedObject]
),但测试现在通过了!谢谢考虑到最后一个问题,好好想想!更改为[SOTest.Person]
成功了。如果可以,我会投两次票。:-)如果我导入SOTest
并让managedObjectContext=(UIApplication.sharedApplication().delegate为!SOTest.AppDelegate).managedObjectContext
,我会得到一个错误,即在普通项目的模块SOTest
中没有名为AppDelegate的类型,它与您的确切托管对象上下文行一起工作,不会出现错误。请注意,最新的Xcode会自动执行上述导入,如下所示:@testable import-SOTest
。将@testable import-SOTest
添加到我的SOTestTests
类中完成了这项任务。由于某种原因,它无法将数组强制转换为[Person]
(我不得不将其更改为[NSManagedObject]
),但测试现在通过了!谢谢考虑到最后一个问题,好好想想!更改为[SOTest.Person]
成功了。如果可以,我会投两次票。:-)
@testable import SOTest