Async kodu sınama (XCTest)
XCTest ile async sınamalar yazın: sınamaları async olarak işaretleyin, await ve throws kullanın, başarısızlıkları ve zaman aşımlarını sınayın ve yapılandırılmış eşzamanlılık sonuçlarını doğrulayın.
Async kodu sınama (XCTest), CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 3 dersten oluşur.
Eşzamansız testler: temeller
XCTest, async testleri destekler. Testleri küçük ve belirlenebilir tutun:
asynctestler tanımlayın ve await kullanın- Başarısızlıklar için throws ve
do/catchkullanın - sleep çağrılarını küçük sahte nesnelerle değiştirin
Başarılı eşzamansız durum
Testi async olarak işaretleyin ve SUT'yi await ile çağırın. XCTAssertEqual gibi olağan doğrulamaları yazın.
import XCTest
import Foundation
// System Under Test (SUT)
func fetchValue() async -> Int {
try? await Task.sleep(nanoseconds: 50_000_000)
return 42
}
final class AsyncBasicsTests: XCTestCase {
func testFetchValue_returns42() async {
let v = await fetchValue()
XCTAssertEqual(v, 42)
}
}Eşzamansız hata üretme ve doğrulamalar
async throws testleri kullanın. Belirli hatalar için hatayı yakalayın ve amacı açık tutmak üzere örüntü eşleştirmesi yapın.
import XCTest
enum NetError: Error { case offline }
func loadNumber(online: Bool) async throws -> Int {
try await Task.sleep(nanoseconds: 30_000_000)
if !online { throw NetError.offline }
return 7
}
final class AsyncThrowingTests: XCTestCase {
func testLoadNumber_success() async throws {
let n = try await loadNumber(online: true)
XCTAssertEqual(n, 7)
}
func testLoadNumber_offline_throws() async {
do {
_ = try await loadNumber(online: false)
XCTFail("Expected error")
} catch NetError.offline {
// expected
} catch {
XCTFail("Unexpected error: \\(error)")
}
}
}Paralel sonuçlar
Yapılandırılmış eşzamanlılığı test etmek kolaydır: async let kullanın ve nihai sonucu doğrulayın. Kararsız testleri önlemek için gecikmeleri çok kısa tutun.
import XCTest
func compute(_ x: Int) async -> Int {
try? await Task.sleep(nanoseconds: 10_000_000)
return x * x
}
final class ParallelTests: XCTestCase {
func testParallel_asyncLet_sumsSquares() async {
async let a = compute(2)
async let b = compute(3)
let sum = await (a + b)
XCTAssertEqual(sum, 13) // 4 + 9
}
}Zaman aşımını test etme
Zaman aşımlarını, işlemi kısa bir sleep göreviyle yarıştırarak test edin. Testleri hızlı ve kararlı tutmak için çok küçük süreler kullanın.
import XCTest
enum TimeoutError: Error { case timedOut }
func withTimeout<T>(
seconds: Double,
operation: @escaping () async throws -> T
) async throws -> T {
try await withThrowingTaskGroup(of: T.self) { group in
group.addTask { try await operation() }
group.addTask {
try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000))
throw TimeoutError.timedOut
}
let first = try await group.next()!
group.cancelAll()
return first
}
}
final class TimeoutTests: XCTestCase {
func testTimeout_timesOutFast() async {
do {
_ = try await withTimeout(seconds: 0.01) {
try await Task.sleep(nanoseconds: 50_000_000) // slower than timeout
return "OK"
}
XCTFail("Expected timeout")
} catch TimeoutError.timedOut {
// expected
} catch {
XCTFail("Unexpected error: \\(error)")
}
}
}Beklentiler (eski yaklaşım)
Daha eski geri çağrılar için yine beklenti/bekleme kullanın. Yeni kodda eşzamansız testleri tercih edin.
import XCTest
// Legacy API with a completion handler
func legacyFetch(_ completion: @escaping (String) -> Void) {
Task { try? await Task.sleep(nanoseconds: 20_000_000); completion("done") }
}
final class ExpectationTests: XCTestCase {
func testLegacy_withExpectation() {
let exp = expectation(description: "legacy finishes")
legacyFetch { value in
XCTAssertEqual(value, "done")
exp.fulfill()
}
wait(for: [exp], timeout: 1.0)
}
}Modern eşzamansız test biçimi
Hızlı kontrol: Eşzamansız bir işlevi test etmek için en iyi uygulama nedir?
Özet
Özet: await kullanan async XCTest yöntemlerini tercih edin, başarı ve başarısızlık yollarını doğrulayın, gecikmeleri kısa tutun ve beklentileri eski geri çağrılarla sınırlayın.
Sıkça Sorulan Sorular
“Async kodu sınama (XCTest)” dersi ücretsiz mi?
Evet — “Async kodu sınama (XCTest)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 3 dersten oluşur.
“Async kodu sınama (XCTest)” dersinde ne öğreneceğim?
XCTest ile async sınamalar yazın: sınamaları async olarak işaretleyin, await ve throws kullanın, başarısızlıkları ve zaman aşımlarını sınayın ve yapılandırılmış eşzamanlılık sonuçlarını doğrulayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.
“Async kodu sınama (XCTest)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Üretici/tüketici, işlem hatları ve zaman aşımı
- Eski geri çağırmaları/Combine'ı async/await'e uyarlama
- Async kodu sınama (XCTest)