首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCoding的SWIFT2.0单元测试

NSCoding的SWIFT2.0单元测试
EN

Stack Overflow用户
提问于 2015-08-15 23:34:21
回答 3查看 2.1K关注 0票数 6

我将尝试使用Xcode 7(代码覆盖率)和SWIFT2.0中的新测试特性。

使用代码覆盖率,我发现我没有测试我的NSCoding方法。

对于保存一些细节的简单示例,如:

代码语言:javascript
复制
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类中测试这些方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-16 03:01:17

远离问题总是有帮助的。

代码语言:javascript
复制
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)
}
票数 12
EN

Stack Overflow用户

发布于 2021-10-11 14:57:20

如果您不想在测试期间创建实际文件,而只是将其编码和解码到一个简单的基于Data内存的缓冲区,那么改进@DogCoffee就可以回答一些问题:

代码语言:javascript
复制
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,然后返回未包装的值。

票数 3
EN

Stack Overflow用户

发布于 2019-08-17 23:00:29

上面的答案(@dogcoffee's)是正确的,添加了一些我已经修正过的废弃警告。

代码语言:javascript
复制
let locToSave = path.appendingPathComponent("teststasks")

NSKeyedArchiver.archiveRootObject(newPartner, toFile: locToSave)

let data = NSKeyedUnarchiver.unarchiveObject(withFile: locToSave) as? YourClass
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32030411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档