Pengujian Async dan Pengukuran Kinerja
Menguji fungsi async dengan async/await dan mengukur kinerja dengan XCTMeasureOptions.
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 baselineMenguji 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 executedPemeriksaan 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.
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
- Penyiapan, Pembongkaran, dan Metode Pengujian XCTestCase
- Keluarga XCTAssert dan Pernyataan yang Melempar Error
- Mocking Berbasis Protokol dan Injeksi Dependensi
- Pengujian Async dan Pengukuran Kinerja