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.