I am going to try and use the new testing features in Xcode 7 (code coverage) and Swift 2.0.
Using code coverage, I see that I am not testing my NSCoding
methods.
For a trivial example of saving a few details, such as:
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")
}
How do I go about testing these methods in an XCTest
class.
Walking away from a problem always helps.
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)
}