Bir Swift uygulaması:
Hızlı 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)
Paket, yapılandırmanız için ana ve test yollarını keşfetmenin yollarını sunar:
@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
7 | | 8 | Xcode 6'da 9, bir birim test demeti yolu olacak Developer/Xcode/DerivedData
gibi bir şey ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... Developer/CoreSimulator/Devices
normal (birim test dışı) paket yolundan ayrı :
/Users/
UserName/
Library/
Developer/
CoreSimulator/
Devices/
_UUID_/
data/
Containers/
Bundle/
Application/
_UUID_/
App.app/
Ayrıca, birim sınama yürütülebilir dosyasının varsayılan olarak uygulama koduyla bağlantılı olduğunu unutmayın. Ancak, birim test kodu yalnızca test paketinde yalnızca Hedef Üyeliğe sahip olmalıdır. Uygulama kodu, uygulama paketinde yalnızca Hedef Üyeliğe sahip olmalıdır. Çalışma zamanında, birim test hedef paketi yürütme için uygulama paketine enjekte edilir .
Swift Paket Yöneticisi (SPM) 4:
let testBundle = Bundle(for: type(of: self))
print("testBundle.bundlePath = \(testBundle.bundlePath) ")
Not: Varsayılan olarak, komut satırı swift test
bir MyProjectPackageTests.xctest
test paketi oluşturur. Ve, swift package generate-xcodeproj
bir MyProjectTests.xctest
test paketi oluşturacak . Bu farklı test paketlerinin farklı yolları vardır . Ayrıca, farklı test paketlerinde bazı dahili dizin yapısı ve içerik farklılıkları olabilir .
Her iki durumda da, .bundlePath
ve .bundleURL
şu anda macOS üzerinde çalıştırılan test paketinin yolunu döndürür. Ancak, Bundle
şu anda Ubuntu Linux için uygulanmamıştır.
Ayrıca, komut satırı swift build
ve swift test
şu anda kaynakları kopyalamak için bir mekanizma sağlamaz.
Bununla birlikte, Swift Paket Yöneticisi'ni macOS Xcode, macOS komut satırı ve Ubuntu komut satırı ortamlarındaki kaynaklarla kullanmak için süreçler ayarlamak mümkündür. Bir örnek burada bulunabilir: 004.4'2 SW Dev Swift Paket Yöneticisi (SPM) ve Kaynaklar Qref
Ayrıca bkz: Swift Package Manager ile birim testlerinde kaynakları kullanma
Swift Paket Yöneticisi (SPM) 4.2
Swift Paket Yöneticisi PackageDescription 4.2 yerel bağımlılıkları destekliyor .
Yerel bağımlılıklar disk üzerinde doğrudan yolları kullanılarak yönlendirilebilen paketlerdir. Yerel bağımlılıklara yalnızca kök pakette izin verilir ve paket grafiğinde aynı ada sahip tüm bağımlılıkları geçersiz kılar.
Not: SPM 4.2 ile aşağıdakine benzer bir şeyin mümkün olmasını bekliyorum, ancak henüz test etmedim:
// swift-tools-version:4.2
import PackageDescription
let package = Package(
name: "MyPackageTestResources",
dependencies: [
.package(path: "../test-resources"),
],
targets: [
// ...
.testTarget(
name: "MyPackageTests",
dependencies: ["MyPackage", "MyPackageTestResources"]
),
]
)