การติดตั้ง Swift:
สวิฟท์ 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 มีวิธีการค้นพบเส้นทางหลักและเส้นทางทดสอบสำหรับการกำหนดค่าของคุณ:
@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
ใน Xcode 6 | 7 | 8 | 9 เส้นทางชุดบันเดิลทดสอบหน่วยจะมีDeveloper/Xcode/DerivedData
ลักษณะคล้าย ...
/Users/
UserName/
Library/
Developer/
Xcode/
DerivedData/
App-qwertyuiop.../
Build/
Products/
Debug-iphonesimulator/
AppTests.xctest/
foo.txt
... ซึ่งแยกจากเส้นทางชุดข้อมูลDeveloper/CoreSimulator/Devices
ปกติ (ไม่ใช่หน่วยทดสอบ) :
/Users/
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 Linux
นอกจากนี้บรรทัดคำสั่งswift build
และswift test
ไม่ได้จัดเตรียมกลไกสำหรับการคัดลอกทรัพยากร
อย่างไรก็ตามด้วยความพยายามบางอย่างคุณสามารถตั้งค่ากระบวนการสำหรับการใช้ Swanger Package Manger กับทรัพยากรใน macOS Xcode, บรรทัดคำสั่ง macOS และสภาพแวดล้อมบรรทัดคำสั่งของ Ubuntu ตัวอย่างหนึ่งสามารถพบได้ที่นี่: 004.4'2 SW Dev Swift Package Manager (SPM) พร้อมทรัพยากร Qref
ดูเพิ่มเติม: ใช้ทรัพยากรในการทดสอบหน่วยด้วย Swift Package Manager
Swift Package Manager (SPM) 4.2
สวิฟท์แพคเกจผู้จัดการPackageDescription 4.2สนับสนุนการเปิดตัวของการอ้างอิงในท้องถิ่น
Local dependencies เป็นแพ็คเกจบนดิสก์ที่สามารถอ้างอิงโดยตรงโดยใช้พา ธ การอ้างอิงโลคัลได้รับอนุญาตเฉพาะในแพ็คเกจรูทและจะแทนที่การขึ้นต่อกันทั้งหมดที่มีชื่อเดียวกันในกราฟแพ็กเกจ
หมายเหตุ: ฉันคาดหวัง แต่ยังไม่ได้ทดสอบว่าควรมีสิ่งต่อไปนี้ใน 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"]
),
]
)