«Прерванный системный вызов» при чтении тестовых данных в XCTestCase - PullRequest
0 голосов
/ 25 апреля 2020

Использование XCode (11.4.1) на Catalina (10.15.4, только обновляется с Mojave 5 дней go), с крошечным SPM-проектом, открытым в XCode в «режиме папки» (т. Е. Не фактическим *) 1001 *), у меня есть тест, который должен прочитать некоторые входные данные из файла примера. Следующие рекомендации по созданию URL-адресов для этих файлов , Data(contentsOf:) не могут его прочитать, хотя сгенерированный URL-адрес правильный.

Код:

func testCanReadConfigFromFile() {
    let thisDirectory = URL(fileURLWithPath: #file)
        .deletingLastPathComponent()

    let url = thisDirectory
        .appendingPathComponent("Test_data", isDirectory: true)
        .appendingPathComponent("Config.json", isDirectory: false)

    print(url.absoluteString)

    do {
        let _ = try Data(contentsOf: url)
    } catch let error {
        print(error)
        print(error.localizedDescription)
    }
}

исключение:

Error Domain=NSCocoaErrorDomain Code=256 "The file “Config.json” couldn’t be opened."
UserInfo={NSFilePath=/full/path/to/project/Tests/ProjectTests/Test_data/Config.json,
NSUnderlyingError=0x100b0aa30
{Error Domain=NSPOSIXErrorDomain Code=4 "Interrupted system call"}}

Если я беру строку, выводимую print(url.absoluteString), и в терминале выполняю file <absoulteString>, это подтверждает, что мой файл существует по этому пути (и это JSON) .

«Прерванный системный вызов» заставляет меня думать, что виноваты более строгие правила «песочницы» Каталины, но мне не было показано диалоговое окно с разрешениями. Этот проект находится в моей папке ~ / Documents, которую Xcode имеет разрешение на чтение.

Отредактировано, чтобы добавить:

swift test в командной строке работает. Это только запуск тестов в XCode, который обнаруживает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...