这是使用swift进行CoreData单元测试时的常见问题。 EXC_BREAKPOINT异常是由于普通模块和测试模块之间的swift命名空间差异而发生的。即使引入了一些解决方案,我仍然在努力解决这个问题。
我做了什么,我的问题就在这里。
func testExample() { let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate }
lazy var managedObjectModel: NSManagedObjectModel = { // The managed object model for the application. This property is not optional... let modelURL = NSBundle.mainBundle().URLForResource("CoreDataSample", withExtension: "momd")! let managedObjectModel = NSManagedObjectModel(contentsOfURL: modelURL)! // Check if we are running as test or not let environment = NSProcessInfo.processInfo().environment as [String : AnyObject] let isTest = (environment["XCInjectBundle"] as? String)?.pathExtension == "xctest" // Create the module name let moduleName = (isTest) ? "CoreDataSampleTests" : "CoreDataSample" // Create a new managed object model with updated entity class names var newEntities = [] as [NSEntityDescription] for (_, entity) in enumerate(managedObjectModel.entities) { let newEntity = entity.copy() as NSEntityDescription newEntity.managedObjectClassName = "\(moduleName).\(entity.name)" newEntities.append(newEntity) } let newManagedObjectModel = NSManagedObjectModel() newManagedObjectModel.entities = newEntities return newManagedObjectModel }()
我想知道的是两件事。
如何避免EXC_BREAKPOINT异常。测试方法似乎正常工作,但EXC_BREAKPOINT异常临时停止每个测试方法的过程。我每次都要恢复它。运行测试方法非常困难。
如果我无法避免EXC_BREAKPOINT,我想在执行单元测试时忽略EXC_BREAKPOINT异常。
任何帮助或建议对我都有帮助。
谢谢,
供参考:
Swift cannot test core data in Xcode tests?
编辑:
XCode版本是6.2
答案 0 :(得分:3)
正如沃尔夫冈所说,我认为Jesse Squires解决方案有效(对我而言),但有几个步骤:
(这不是必要的,但有助于保持整洁,因为以下步骤涉及将很多事情公之于众,如果你不把它分开,它将在你的整个项目中传播。)
您最终应该看到如下所示的实体:
import Foundation
import CoreData
@objc(ClassName)
public class ClassName: NSManagedObject {
@NSManaged public var property: Type
}
SO答案here中有另一种方法也可以。
编辑1:添加了关于替代方案的说明。
编辑2:通过提示将Core Data移动到一个单独的模块中。
答案 1 :(得分:2)
您可以找到Jesse发布的解决方案:http://www.jessesquires.com/swift-coredata-and-testing/