swiftunit-testingswift2xctestnscoding

Swift 2.0 Unit Testing for NSCoding


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.

enter image description here

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.


Solution

  • 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)
    }