Я хочу написать модульный тест для чтения / записи файлов, поэтому я создал вспомогательный функционал, который создает временный файл (адаптированный из Документы 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
}
Проблема в том, что createFile
линия ближе к концу. Это всегда терпит неудачу! У модульных тестов нет разрешения на запись во временный каталог?
Если я проигнорирую этот сбой и попытаюсь записать в файл
let file = try FileHandle(forWritingTo: mkTmp())
defer { file.closeFile() }
file.write(data)
При попытке открыть дескриптор файла появляется ошибка, что файл не существует.
Нужно ли где-то настраивать разрешения на запись в файл для моего модульного теста?