NSCoding的Swift 2.0单元测试
我将尝试使用Xcode 7(代码覆盖率)和Swift 2.0中的新测试功能 使用代码覆盖率,我发现我没有测试我的NSCoding方法 对于保存一些细节的简单示例,例如NSCoding的Swift 2.0单元测试,swift,unit-testing,nscoding,Swift,Unit Testing,Nscoding,我将尝试使用Xcode 7(代码覆盖率)和Swift 2.0中的新测试功能 使用代码覆盖率,我发现我没有测试我的NSCoding方法 对于保存一些细节的简单示例,例如 required init(coder aDecoder: NSCoder) { name = aDecoder.decodeObjectForKey("name") as! String time = aDecoder.decodeIntegerForKey("time") } func encodeWith
required init(coder aDecoder: NSCoder) {
name = aDecoder.decodeObjectForKey("name") as! String
time = aDecoder.decodeIntegerForKey("time")
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(time, forKey: "time")
aCoder.encodeObject(name, forKey: "name")
}
如何在XCTest类中测试这些方法。避开问题总是有帮助的
func testDecoder() {
let path = NSTemporaryDirectory() as NSString
let locToSave = path.stringByAppendingPathComponent("teststasks")
let newTask = Task(name: "savename", time: "10")
// save tasks
NSKeyedArchiver.archiveRootObject([newTask], toFile: locToSave)
// load tasks
let data = NSKeyedUnarchiver.unarchiveObjectWithFile(locToSave) as? [Task]
XCTAssertNotNil(data)
XCTAssertEqual(data!.count, 1)
XCTAssertEqual(data!.first?.name, "savename")
XCTAssertEqual(data!.first?.time, 10)
}
上面的答案(@dogchoffee's)是正确的,添加了一些我已经修复的弃用警告
let locToSave = path.appendingPathComponent("teststasks")
NSKeyedArchiver.archiveRootObject(newPartner, toFile: locToSave)
let data = NSKeyedUnarchiver.unarchiveObject(withFile: locToSave) as? YourClass
为了完成这一点,我将在测试结束时添加文件删除。当它位于temp目录中时,不必清除它,单元测试也不应保留任何更改的状态。修复了一些不推荐使用的警告:let locToSave=path.appendingPathComponent(“tests_partners”)NSKeyedArchiver.archiveRootObject(newPartner,toFile:locToSave)让data=NSKeyedUnarchiver.unarchiveObject(带文件:locToSave)作为?