Swift Academy · Pelajaran

Pengujian Async dan Pengukuran Kinerja

Menguji fungsi async dengan async/await dan mengukur kinerja dengan XCTMeasureOptions.

Pelajaran 4 dari 413 langkah

Pengujian Async dan Pengukuran Kinerja adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Menguji Fungsi Asinkron

Deklarasikan metode pengujian sebagai async throws agar dapat menggunakan await langsung di dalam isi pengujian tanpa kode tambahan yang berlebihan.

final class FetcherTests: XCTestCase {
  func testFetchReturnsUser() async throws {
    let user = try await UserService().fetchUser(id: 1)
    XCTAssertEqual(user.name, "Alice")
  }
}

setUp dan tearDown Asinkron

Timpa setUp() async throws untuk melakukan inisialisasi asinkron sebelum setiap pengujian.

override func setUp() async throws {
  try await super.setUp()
  sut = await AsyncService.make()
}

XCTestExpectation untuk API Callback

Untuk API yang menggunakan callback, bukan async/await, gunakan XCTestExpectation dan wait(for:timeout:).

func testCallback() {
  let exp = expectation(description: "data received")
  service.fetchWithCallback { data in
    XCTAssertNotNil(data)
    exp.fulfill()
  }
  wait(for: [exp], timeout: 5.0)
}

Membalik Ekspektasi

Ekspektasi terbalik gagal jika MEMANG dipenuhi—berguna untuk memastikan callback TIDAK dipanggil.

let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)

XCTMeasure untuk Performa

measure {} menjalankan bloknya 10 kali dan melaporkan waktu rata-rata, simpangan baku, serta perbandingan dengan garis dasar.

func testSortPerformance() {
  let data = Array(0..<10_000).shuffled()
  measure {
    _ = data.sorted()
  }
}

XCTMeasureOptions

Konfigurasikan jumlah iterasi dan metrik yang akan diukur (waktu, memori, CPU).

func testParsePerformance() {
  let options = XCTMeasureOptions()
  options.iterationCount = 5
  measure(options: options) {
    _ = try? JSONDecoder().decode([Item].self, from: largeJSON)
  }
}

Pengukuran Performa Asinkron

Gunakan measure(metrics:options:block:) dengan blok asinkron untuk mengukur operasi asinkron.

func testAsyncFetchPerformance() {
  measure {
    let exp = expectation(description: "done")
    Task {
      _ = try? await service.fetchAll()
      exp.fulfill()
    }
    wait(for: [exp], timeout: 10)
  }
}

Garis Dasar

Setelah menjalankan pengujian pengukuran, tetapkan garis dasar di Xcode. Proses berikutnya gagal jika performa menurun melewati ambang batas.

// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baseline

Menguji Kode Terisolasi Aktor

Akses keadaan yang terisolasi aktor dari pengujian menggunakan await.

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)
  }
}

Kerangka Swift Testing (Swift 6)

Swift 6 menyertakan kerangka Testing baru dengan @Test, #expect, dan @Suite sebagai alternatif modern untuk XCTest.

import Testing

@Suite struct MathTests {
  @Test func addition() {
    #expect(2 + 2 == 4)
  }
}

Menggabungkan XCTest dan Swift Testing

Kedua kerangka dapat digunakan bersamaan dalam target pengujian yang sama selama migrasi dari XCTest ke Swift Testing.

import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executed

Pemeriksaan Singkat

API XCTest mana yang mengukur performa blok kode dan membandingkannya dengan garis dasar yang tersimpan?

Ringkasan Pelajaran

Tandai metode pengujian dengan async throws agar dapat langsung menggunakan await. Gunakan XCTestExpectation untuk API dengan panggilan balik. Lakukan pengukuran dengan measure {} dan tetapkan tolok ukur untuk mendeteksi regresi. Uji aktor dengan await. Pelajari @Test dan #expect dari Swift Testing untuk pengujian modern.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengujian Async dan Pengukuran Kinerja” gratis?

Ya — teks lengkap “Pengujian Async dan Pengukuran Kinerja” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengujian Async dan Pengukuran Kinerja”?

Menguji fungsi async dengan async/await dan mengukur kinerja dengan XCTMeasureOptions. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pengujian Async dan Pengukuran Kinerja” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penyiapan, Pembongkaran, dan Metode Pengujian XCTestCase
  2. Keluarga XCTAssert dan Pernyataan yang Melempar Error
  3. Mocking Berbasis Protokol dan Injeksi Dependensi
  4. Pengujian Async dan Pengukuran Kinerja
← Kembali ke Swift Academy