测试 Swift 包涉及读取文本文件,但说我没有权限并失败并显示“nil”

Test for Swift package involves reading text file, but says I don't have permissions and fails with 'nil'

提问人:Alexandstein 提问时间:10/15/2023 最后编辑:Joakim DanielsonAlexandstein 更新时间:10/15/2023 访问量:23

问:

我正在重新学习编程,并通过编写一个简单的 CSV 解析器作为 Swift 包作为一个小项目来自学基本的 Swift 概念。这涉及能够为类提供任意文件路径以从外部文件读取。 但是,这失败了,并且错误显示我没有权限读取单元测试中的文件。这是以与游乐场沙盒相同的方式进行沙盒的问题吗?如果是这样,有没有办法让沙盒访问该文件?.cvsXCTest

以下是该函数的内部代码:

public func parse(fromFilePath path : String) -> Array<Dictionary<String,String>>?{
    let fileManager = FileManager()
    if let fileContents = fileManager.contents(atPath: path){
        let fileText = fileContents.base64EncodedString()
        
        print(fileText.split(separator: "\n").count)
    }else{
        print("File read failed!")
    }
    //If all fails, fall through to return nil
    return nil
}

这是单元测试正在做的事情。第一个函数通过,因为它不是正确的文件路径,但第二个测试由于权限问题而使有效路径失败。

    func testFileOpen_Failed() throws{
    let parser = CSVParse()
    let results = parser.parse(fromFilePath: "Nonexistent File")
    XCTAssert(results == nil)
}

func testFileOpen_Success() throws{
    let parser = CSVParse()
    let filePath = ".CSVParseTests"
    let results = parser.parse(fromFilePath: filePath)
    XCTAssert(results != nil)
}
Swift Xcode XCest

评论

0赞 Joakim Danielson 10/15/2023
首先,我认为您应该在代码和测试中使用 URL 而不是字符串路径,其次,它本身不是一个正确的路径。如果您在代码和测试中使用 URL,那么对于 swift 包,XCTest 框架将使用 /tmp 作为其工作文件夹,因此创建相同的 url 进行测试非常简单。".CSVParseTests"let fileUrl = URL(fileURLWithPath: "CSVParseTests")

答: 暂无答案