迅捷5.3
注意:Swift 5.3包含Package Manager Resources SE-0271功能,可与应用程序捆绑包和测试捆绑包资源一起使用。
资源并不总是打算供软件包的客户使用;资源的一种使用可能包括仅单元测试所需的测试装置。此类资源不会与库代码一起合并到软件包的客户端中,而只会在运行软件包的测试时使用。
斯威夫特4、5:
let testBundle = Bundle(for: type(of: self))
guard let fileURL = testBundle.url(forResource: "imageName", withExtension: "png")
else { fatalError() }
guard let filePath = bundle.path(forResource: "dataName", ofType: "csv")
else { fatalError() }
let fileUrl = URL(fileURLWithPath: filePath)
捆绑包提供了发现配置主要路径和测试路径的方法:
@testable
import Example
class ExampleTests: XCTestCase {
func testExample() {
let bundleMain = Bundle.main
let bundleDoingTest = Bundle(for: type(of: self ))
let bundleBeingTested = Bundle(identifier: "com.example.Example")!
print("bundleMain.bundlePath : \(bundleMain.bundlePath)")
print("bundleDoingTest.bundlePath : \(bundleDoingTest.bundlePath)")
print("bundleBeingTested.bundlePath : \(bundleBeingTested.bundlePath)")
print("bundleMain = " + bundleMain.description)
print("bundleDoingTest = " + bundleDoingTest.description)
print("bundleUnderTest = " + bundleBeingTested.description)
Xcode URL将Developer/Xcode/DerivedData
类似于...
file:
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
imageName.png
...与Developer/CoreSimulator/Devices
URL分开
file:
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
还要注意,默认情况下,单元测试可执行文件与应用程序代码链接。但是,单元测试代码仅应在测试包中具有目标成员资格。应用程序代码应仅在应用程序捆绑包中具有“目标成员身份”。在运行时,将单元测试目标捆绑软件注入应用程序捆绑软件中以进行执行。
Swift Package Manager(SPM)4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
注意:默认情况下,命令行将swift test
创建MyProjectPackageTests.xctest
测试包。并且,swift package generate-xcodeproj
将创建一个MyProjectTests.xctest
测试包。这些不同的测试包具有不同的路径。同样,不同的测试包可能具有一些内部目录结构和内容差异。
无论哪种情况,.bundlePath
and.bundleURL
都会返回当前在macOS上运行的测试包的路径。但是,Bundle
当前尚未为Ubuntu实现。
另外,命令行swift build
和swift test
当前不提供复制资源的机制。
但是,只要付出一些努力,就有可能在macOS Xcode,macOS命令行和Ubuntu命令行环境中通过资源来设置使用Swift软件包管理器的过程。可以在此处找到一个示例:004.4'2具有资源Qref的SW Dev Swift软件包管理器(SPM)