0Pricing
Swift Academy · Ders

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:

  • async testler tanımlayın ve await kullanın
  • Başarısızlıklar için throws ve do/catch kullanı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

  1. Üretici/tüketici, işlem hatları ve zaman aşımı
  2. Eski geri çağırmaları/Combine'ı async/await'e uyarlama
  3. Async kodu sınama (XCTest)
← Swift Academy Sayfasına Dön