Section 11/171 menit
11. Testing di SPM
11. Testing di SPM
Struktur Test
swift
// Sources/MyLib/Calculator.swift
public struct Calculator {
public init() {}
public func add(_ a: Int, _ b: Int) -> Int { a + b }
}
// Tests/MyLibTests/CalculatorTests.swift
import Testing
@testable import MyLib
@Test
func addingNumbers() {
let c = Calculator()
#expect(c.add(2, 3) == 5)
}
swift
// Package.swift
.testTarget(
name: "MyLibTests",
dependencies: ["MyLib"],
resources: [.process("Fixtures")] // test fixtures
)
Menjalankan Test
swift
swift test # semua test
swift test --filter CalculatorTests # spesifik suite
swift test --parallel # paralel (default sejak Swift 5.4)
swift test --enable-code-coverage # generate coverage data
Test Resource Access
swift
@Test
func loadFixture() throws {
let url = Bundle.module.url(forResource: "sample", withExtension: "json")!
let data = try Data(contentsOf: url)
#expect(data.count > 0)
}
Swift Testing vs XCTest
SPM mendukung keduanya — pilih sesuai versi Swift:
| Swift Version | Default Framework |
|---|---|
| ≤ 5.9 | XCTest |
| 5.10+ | Swift Testing tersedia, opt-in |
| 6.0+ | Swift Testing default untuk target baru |
Lihat swift6-swift-testing.md untuk detail.