2015-08-15 6 views
3

Я собираюсь попробовать и использовать новые функции тестирования в Xcode 7 (покрытие кода) и Swift 2.0.Swift 2.0 Unit Testing для NSCoding

Использование покрытия кода, я вижу, что я не тестирую свои методы NSCoding.

enter image description here

Для простейшего примера экономии некоторые детали, такие как

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 класса.

ответ

7

Уход от проблемы всегда помогает.

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