在运行 XCTests 时访问主应用程序包
Posted
技术标签:
【中文标题】在运行 XCTests 时访问主应用程序包【英文标题】:Accessing Bundle of main application while running XCTests 【发布时间】:2018-01-17 12:38:54 【问题描述】:在测试中target -> General -> Testing: set Host Application to None
,因此不会启动任何应用。
但在这种情况下,我无法使用 Bundle.main.resourcePath
并访问我的主应用程序的资源(其中包含一些命令文件作为资源,我需要使用 Process()
运行它们)。
有人可以提出解决方案吗?
【问题讨论】:
【参考方案1】:Bundle(identifier: "com.something.app")
将为您获取特定捆绑包 ID 的捆绑包。问题是,如果您的主要目标的捆绑 ID 发生更改,这将失败。
您也可以尝试获取特定类的捆绑包:
let bundle = Bundle(for: SomeClass.self)
SomeClass
是主包中的一个类。
【讨论】:
我曾尝试过 'Bundle(identifier: mainappbundleid)',但是在运行测试目标时,这给出了 nil,而 'Bundle(for: SomeClass.self)' 给出了测试目标本身的包。 我还是卡住了。运行测试目标时,是否会加载主应用程序包(因为主机应用程序设置为无)?可能这就是为什么 Bundle(identifier) 给出 nil 的原因?【参考方案2】:还将文件添加到 Test target 的 'Copy Bundle Resources',然后使用以下代码获取资源的路径,而不是 "\(Bundle.main.resourcePath!)/test.command"
let testBundle = Bundle(for: type(of: self))
let path = "\(testBundle.resourcePath!)/test.command""
【讨论】:
以上是关于在运行 XCTests 时访问主应用程序包的主要内容,如果未能解决你的问题,请参考以下文章
为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?
如何修复 Xcode 10 中的“XCtests 间歇性无法在模拟器中启动应用程序”
如果使用模拟器,从 Xcode 和 xcodebuild 运行 xctests 会失败 - dyld:未加载库:@rpath/libswiftSwiftOnoneSupport.dylib 问题 -