Max*_*Max 5 xcode unit-testing file swift
我想编写一个读取/写入文件的单元测试,因此我创建了一个辅助函数来创建临时文件(改编自Apple的文档):
func mkTmp() -> URL {
let fileManager = FileManager.default
let directory = fileManager.temporaryDirectory
let filename = UUID().uuidString
let fileURL = directory.appendingPathComponent(filename)
addTeardownBlock {
do {
if fileManager.fileExists(atPath: fileURL.path) {
try fileManager.removeItem(at: fileURL)
XCTAssertFalse(fileManager.fileExists(atPath: fileURL.path))
}
} catch {
XCTFail("Error while deleting temporary file: \(error)")
}
}
do {
try fileManager.createDirectory(at: fileURL, withIntermediateDirectories: true)
// FIXME: this always fails for some reason
XCTAssertTrue(fileManager.createFile(atPath: fileURL.path, contents: "test".data(using: .utf8)))
} catch {
XCTFail("Error while making temp dir: \(error)")
}
return fileURL
}
Run Code Online (Sandbox Code Playgroud)
问题是那条createFile
线接近末尾。总是失败!单元测试对临时目录没有写权限吗?
如果我忽略该失败并尝试写入文件
let file = try FileHandle(forWritingTo: mkTmp())
defer { file.closeFile() }
file.write(data)
Run Code Online (Sandbox Code Playgroud)
当我尝试打开文件句柄时收到文件不存在的错误。
我是否需要在单元测试的某处设置文件写入权限?
无法创建该文件,因为该 url/path\xe2\x80\x94 处已存在由 . 创建的目录fileManager.createDirectory(at: fileURL, ...)
。fileURL
您可以通过添加这些断言来检查调用后存在的内容来确认这一点fileManager.createDirectory(at: fileURL, ...)
:
try fileManager.createDirectory(at: fileURL, withIntermediateDirectories: true)\n\nvar isDirectory: ObjCBool = false\nXCTAssertTrue(fileManager.fileExists(atPath: fileURL.path, isDirectory: &isDirectory))\nXCTAssertTrue(isDirectory.boolValue)\n
Run Code Online (Sandbox Code Playgroud)\n\n为了能够创建文件,fileURL
您只需创建其父目录:
try fileManager.createDirectory(at: fileURL.deletingLastPathComponent(), withIntermediateDirectories: true)\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
4068 次 |
最近记录: |