Свіфт 5.3
Примітка: Swift 5.3 включає можливості Resource 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)
URL-адреса Xcode буде виглядати 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
і .bundleURL
поверне шлях тестового набору, який зараз запущений на macOS. Однак Bundle
наразі не реалізовано для Ubuntu.
Крім того, командний рядок swift build
іswift test
даний час не забезпечує механізм копіювання ресурсів.
Однак, доклавши певних зусиль, можна налаштувати процеси використання Swift Packager Manger із ресурсами в середовищах macOS Xcode, macOS і командному рядку Ubuntu. Один приклад можна знайти тут: 004.4'2 SW Dev Swift Package Manager (SPM) With Resources Qref