我将尝试使用Xcode 7(代码覆盖率)和SWIFT2.0中的新测试特性。
使用代码覆盖率,我发现我没有测试我的NSCoding方法。

对于保存一些细节的简单示例,如:
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类中测试这些方法。
发布于 2015-08-16 03:01:17
远离问题总是有帮助的。
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)
}发布于 2021-10-11 14:57:20
如果您不想在测试期间创建实际文件,而只是将其编码和解码到一个简单的基于Data内存的缓冲区,那么改进@DogCoffee就可以回答一些问题:
func testDecoder() throws {
let savedTask = Task(name: "savename", time: "10")
let encodedData = try NSKeyedArchiver.archivedData(withRootObject: [savedTask], requiringSecureCoding: false)
let loadedTasks = try XCTUnwrap(try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(encodedData) as? [Task])
XCTAssertEqual(loadedTasks.count, 1)
let loadedTaks = loadedTasks.first!
XCTAssertEqual(loadedTask.name, "savename")
XCTAssertEqual(loadedTask.time, 10)
}这还使用更新的XCTUnwrap(expression) API断言表达式不是nil,然后返回未包装的值。
发布于 2019-08-17 23:00:29
上面的答案(@dogcoffee's)是正确的,添加了一些我已经修正过的废弃警告。
let locToSave = path.appendingPathComponent("teststasks")
NSKeyedArchiver.archiveRootObject(newPartner, toFile: locToSave)
let data = NSKeyedUnarchiver.unarchiveObject(withFile: locToSave) as? YourClasshttps://stackoverflow.com/questions/32030411
复制相似问题