XCUITest 从捆绑形式 UITest 目标中读取文件

Posted

技术标签:

【中文标题】XCUITest 从捆绑形式 UITest 目标中读取文件【英文标题】:XCUITest Reading file from bundle form UITest target 【发布时间】:2021-05-17 12:59:26 【问题描述】:

我正在尝试读取 Xcode 包中存在的 plist 文件,

方法 #1(无效): 我使用的是static variable(下面屏幕截图中的第 23 行),它返回包中存在的文件路径,它不起作用

方法 #2(无效): 使用Bundle.main 读取文件不起作用

方法 #3(工作解决方案): 当我用相同的代码行编写function(下面屏幕截图中的第 30 行)时,它可以工作!

最初我尝试使用 static variable 读取文件并浪费了 2 天,直到我发现使用 function 而不是 static variable 可以工作。

问题:

    我找不到任何相关文档,谁能解释一下为什么这个方法 #1 不起作用? type(of:) 是不是特定于 object 类型而不是 class 类型?

【问题讨论】:

【参考方案1】:

从 UITest 目标读取文件的正确方法是

正确的文件读取方式:

func getPath() -> String?  
    let bundle = Bundle(for: type(of: self))
    let path = bundle.path(forResource: "MockMDM", ofType: "plist")
    return path

也让我分享看起来正确但不起作用的代码

错误的文件读取方式:

static var mockMDMFile: [String: Any]? 
    
    if let path = Bundle.main.path(forResource: "MockMDM", ofType: "plist") 
        let mdmDict = NSDictionary(contentsOfFile: path) as! [String: Any]
        return mdmDict
    
    return nil

走错路失败的原因:

应用有多个包,UITest 目标中的文件将是不同包的一部分不是主包 (Bundle.main)。

【讨论】:

为什么我看不到问题和答案的区别? ? :D 我找到了答案,但不知道它为什么起作用,所以发布了有问题的工作和非工作代码以及我在答案中的发现,以便对面临类似问题的人有所帮助: D、再读一遍问题,有2个问题@MojtabaHosseini 让我为你重写它☺️ @MojtabaHosseini

以上是关于XCUITest 从捆绑形式 UITest 目标中读取文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS XCUITest 期间配置 Firebase

iOS XCUITest 模拟指纹

如何在 XCUITest 中访问导航栏上的右键项目按钮?

无法加载 UITest 包

如何从 XCUITest 读取 Json 文件?

XCTest 在 UITest 中全新安装应用程序