Eşzamansız Testler ve Başarım Ölçümü
async/await ile eşzamansız işlevleri sınayın ve XCTMeasureOptions ile ölçüm yapın.
Eşzamansız Testler ve Başarım Ölçümü, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. 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 4 dersten oluşur.
async İşlevlerini Sınama
Ek kalıp kodu olmadan sınama gövdelerinin içinde doğrudan await kullanmak için sınama metotlarını async throws olarak bildirin.
final class FetcherTests: XCTestCase {
func testFetchReturnsUser() async throws {
let user = try await UserService().fetchUser(id: 1)
XCTAssertEqual(user.name, "Alice")
}
}Asenkron setUp ve tearDown
Her sınamadan önce asenkron başlatma gerçekleştirmek için setUp() async throws yöntemini geçersiz kılın.
override func setUp() async throws {
try await super.setUp()
sut = await AsyncService.make()
}Geri Çağırma API'leri için XCTestExpectation
async/await yerine geri çağırmalar kullanan API'ler için XCTestExpectation ve wait(for:timeout:) kullanın.
func testCallback() {
let exp = expectation(description: "data received")
service.fetchWithCallback { data in
XCTAssertNotNil(data)
exp.fulfill()
}
wait(for: [exp], timeout: 5.0)
}Beklentileri Tersine Çevirme
Tersine çevrilmiş bir beklenti, IS karşılanırsa başarısız olur; bu, bir geri çağırmanın NOT çağrıldığını doğrulamak için kullanışlıdır.
let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)Performans için XCTMeasure
measure {} bloğunu 10 kez çalıştırır ve ortalama süreyi, standart sapmayı ve referans karşılaştırmasını raporlar.
func testSortPerformance() {
let data = Array(0..<10_000).shuffled()
measure {
_ = data.sorted()
}
}XCTMeasureOptions
Yineleme sayısını ve hangi metriğin ölçüleceğini (süre, bellek, CPU) yapılandırın.
func testParsePerformance() {
let options = XCTMeasureOptions()
options.iterationCount = 5
measure(options: options) {
_ = try? JSONDecoder().decode([Item].self, from: largeJSON)
}
}Asenkron Performans Ölçümü
Asenkron işlemleri ölçmek için asenkron bir blokla birlikte measure(metrics:options:block:) kullanın.
func testAsyncFetchPerformance() {
measure {
let exp = expectation(description: "done")
Task {
_ = try? await service.fetchAll()
exp.fulfill()
}
wait(for: [exp], timeout: 10)
}
}Referans Değerler
Bir ölçüm sınamasını çalıştırdıktan sonra Xcode'da bir referans değer belirleyin. İlerideki çalıştırmalarda performans eşik değerin ötesinde gerilerse sınama başarısız olur.
// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baselineAktör Yalıtımlı Kodu Sınama
Aktör yalıtımlı duruma sınamalardan await kullanarak erişin.
actor Counter { var value = 0; func increment() { value += 1 } }
final class CounterTests: XCTestCase {
func testIncrement() async {
let counter = Counter()
await counter.increment()
let val = await counter.value
XCTAssertEqual(val, 1)
}
}Swift Testing Çerçevesi (Swift 6)
Swift 6, XCTest'e modern bir alternatif olarak @Test, #expect ve @Suite içeren yeni bir Testing çerçevesi sunar.
import Testing
@Suite struct MathTests {
@Test func addition() {
#expect(2 + 2 == 4)
}
}XCTest ile Swift Testing'i Birleştirme
XCTest'ten Swift Testing'e geçiş sırasında her iki çerçeve de aynı sınama hedefinde birlikte bulunabilir.
import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executedHızlı Kontrol
Bir kod bloğunun performansını ölçen ve bunu kayıtlı bir referans değerle karşılaştıran XCTest API'si hangisidir?
Ders Özeti
Doğrudan await kullanabilmek için test yöntemlerini async throws olarak işaretleyin. Geri çağırma API'leri için XCTestExpectation kullanın. measure {} ile ölçüm yapın ve gerilemeleri tespit etmek için temel değerler belirleyin. Aktörleri await ile test edin. Modern testler için Swift Testing'in @Test ve #expect özelliklerini inceleyin.
Sıkça Sorulan Sorular
“Eşzamansız Testler ve Başarım Ölçümü” dersi ücretsiz mi?
Evet — “Eşzamansız Testler ve Başarım Ölçümü” 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 4 dersten oluşur.
“Eşzamansız Testler ve Başarım Ölçümü” dersinde ne öğreneceğim?
async/await ile eşzamansız işlevleri sınayın ve XCTMeasureOptions ile ölçüm yapı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, 4 dersinin 4. dersidir.
“Eşzamansız Testler ve Başarım Ölçümü” 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
- XCTestCase Kurulumu, Temizleme ve Test Yöntemleri
- XCTAssert Ailesi ve Hata Fırlatan Doğrulamalar
- Protokol Tabanlı Sahte Nesne Kullanımı ve Bağımlılık Ekleme
- Eşzamansız Testler ve Başarım Ölçümü