Implementasi Swift:
Cepat 2
let testBundle = NSBundle(forClass: self.dynamicType)
let fileURL = testBundle.URLForResource("imageName", withExtension: "png")
XCTAssertNotNil(fileURL)
Swift 3, Swift 4
let testBundle = Bundle(for: type(of: self))
let filePath = testBundle.path(forResource: "imageName", ofType: "png")
XCTAssertNotNil(filePath)
Bundle menyediakan cara untuk menemukan jalur utama dan uji untuk konfigurasi Anda:
@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)")
// …/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents
print("bundleDoingTest.bundlePath : \(bundleDoingTest.bundlePath)")
// …/PATH/TO/Debug/ExampleTests.xctest
print("bundleBeingTested.bundlePath : \(bundleBeingTested.bundlePath)")
// …/PATH/TO/Debug/Example.app
print("bundleMain = " + bundleMain.description) // Xcode Test Agent
print("bundleDoingTest = " + bundleDoingTest.description) // Test Case Bundle
print("bundleUnderTest = " + bundleBeingTested.description) // App Bundle
Dalam Xcode 6 | 7 | 8 | 9, jalur bundel unit-test akan berada dalam Developer/Xcode/DerivedData
sesuatu seperti ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... yang terpisah dari Developer/CoreSimulator/Devices
jalur bundel (non-unit-test) biasa :
/Users/
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
Perhatikan juga bahwa unit test executable, secara default, terhubung dengan kode aplikasi. Namun, kode tes unit hanya boleh memiliki Keanggotaan Target hanya di bundel tes. Kode aplikasi seharusnya hanya memiliki Keanggotaan Target dalam bundel aplikasi. Saat runtime, bundel target uji unit disuntikkan ke bundel aplikasi untuk dieksekusi .
Manajer Paket Swift (SPM) 4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
Catatan: Secara default, baris perintah swift test
akan membuat MyProjectPackageTests.xctest
bundel uji. Dan, swift package generate-xcodeproj
akan membuat MyProjectTests.xctest
bundel uji. Kumpulan uji yang berbeda ini memiliki jalur yang berbeda . Juga, kumpulan uji yang berbeda mungkin memiliki beberapa struktur direktori internal dan perbedaan konten .
Dalam kedua kasus tersebut, .bundlePath
dan .bundleURL
akan mengembalikan jalur bundel pengujian yang saat ini sedang dijalankan di macOS. Namun, Bundle
saat ini tidak diterapkan untuk Ubuntu Linux.
Juga, baris perintah swift build
dan swift test
saat ini tidak menyediakan mekanisme untuk menyalin sumber daya.
Namun, dengan beberapa upaya, dimungkinkan untuk mengatur proses untuk menggunakan Swift Package Manger dengan sumber daya di macOS Xcode, baris perintah macOS, dan lingkungan baris perintah Ubuntu. Salah satu contoh dapat ditemukan di sini: 004.4'2 SW Dev Swift Package Manager (SPM) Dengan Resources Qref
Lihat juga: Gunakan sumber daya dalam pengujian unit dengan Swift Package Manager
Manajer Paket Swift (SPM) 4.2
Package Manager Swift PackageDescription 4.2 memperkenalkan dukungan dependensi lokal .
Ketergantungan lokal adalah paket pada disk yang dapat dirujuk langsung menggunakan jalurnya. Ketergantungan lokal hanya diperbolehkan dalam paket root dan menimpa semua dependensi dengan nama yang sama dalam grafik paket.
Catatan: Saya perkirakan, tetapi belum diuji, bahwa sesuatu seperti yang berikut ini dimungkinkan dengan SPM 4.2:
// swift-tools-version:4.2
import PackageDescription
let package = Package(
name: "MyPackageTestResources",
dependencies: [
.package(path: "../test-resources"),
],
targets: [
// ...
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage", "MyPackageTestResources"]
),
]
)