Testy asynchroniczne i pomiar wydajności
Testowanie funkcji asynchronicznych za pomocą async/await i pomiar z użyciem XCTMeasureOptions.
Testy asynchroniczne i pomiar wydajności to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Testowanie funkcji asynchronicznych
Deklaruj metody testowe jako async throws, aby bezpośrednio używać await w ciałach testów bez dodatkowego kodu pomocniczego.
final class FetcherTests: XCTestCase {
func testFetchReturnsUser() async throws {
let user = try await UserService().fetchUser(id: 1)
XCTAssertEqual(user.name, "Alice")
}
}Asynchroniczne setUp i tearDown
Nadpisz setUp() async throws, aby wykonać asynchroniczną inicjalizację przed każdym testem.
override func setUp() async throws {
try await super.setUp()
sut = await AsyncService.make()
}XCTestExpectation dla API opartych na wywołaniach zwrotnych
W przypadku API używających wywołań zwrotnych zamiast async/await użyj XCTestExpectation oraz 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)
}Odwracanie oczekiwań
Odwrócone oczekiwanie powoduje niepowodzenie testu, jeśli ZOSTANIE spełnione — przydaje się do sprawdzania, czy wywołanie zwrotne NIE nastąpi.
let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)XCTMeasure do pomiaru wydajności
measure {} wykonuje swój blok 10 razy i zgłasza średni czas, odchylenie standardowe oraz porównanie z wartością bazową.
func testSortPerformance() {
let data = Array(0..<10_000).shuffled()
measure {
_ = data.sorted()
}
}XCTMeasureOptions
Skonfiguruj liczbę iteracji oraz mierzoną metrykę, taką jak czas, pamięć lub użycie procesora.
func testParsePerformance() {
let options = XCTMeasureOptions()
options.iterationCount = 5
measure(options: options) {
_ = try? JSONDecoder().decode([Item].self, from: largeJSON)
}
}Asynchroniczny pomiar wydajności
Użyj measure(metrics:options:block:) z asynchronicznym blokiem, aby mierzyć operacje asynchroniczne.
func testAsyncFetchPerformance() {
measure {
let exp = expectation(description: "done")
Task {
_ = try? await service.fetchAll()
exp.fulfill()
}
wait(for: [exp], timeout: 10)
}
}Wartości bazowe
Po uruchomieniu testu pomiarowego ustaw wartość bazową w Xcode. Kolejne uruchomienia zakończą się niepowodzeniem, jeśli wydajność pogorszy się ponad określony próg.
// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baselineTestowanie kodu izolowanego przez aktora
Uzyskuj dostęp do stanu izolowanego przez aktora z testów za pomocą 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)
}
}Framework Swift Testing (Swift 6)
Swift 6 zawiera nowy framework Testing z elementami @Test, #expect i @Suite, stanowiący nowoczesną alternatywę dla XCTest.
import Testing
@Suite struct MathTests {
@Test func addition() {
#expect(2 + 2 == 4)
}
}Łączenie XCTest i Swift Testing
Oba frameworki mogą współistnieć w tym samym celu testowym podczas migracji z XCTest do Swift Testing.
import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executedSzybkie sprawdzenie
Które API XCTest mierzy wydajność bloku kodu i porównuje ją z zapisaną wartością bazową?
Podsumowanie lekcji
Metody testowe należy oznaczać jako async throws, aby bezpośrednio używać await. W przypadku interfejsów API opartych na callbackach należy używać XCTestExpectation. Pomiary należy wykonywać za pomocą measure {} i ustawiać wartości bazowe w celu wykrywania regresji. Aktorów należy testować z użyciem await. W nowoczesnych testach warto poznać @Test i #expect z Swift Testing.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Testy asynchroniczne i pomiar wydajności” jest bezpłatna?
Tak — pełny tekst „Testy asynchroniczne i pomiar wydajności” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Testy asynchroniczne i pomiar wydajności”?
Testowanie funkcji asynchronicznych za pomocą async/await i pomiar z użyciem XCTMeasureOptions. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Testy asynchroniczne i pomiar wydajności”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konfiguracja XCTestCase, sprzątanie i metody testowe
- Rodzina XCTAssert i asercje zgłaszające błędy
- Mockowanie oparte na protokołach i wstrzykiwanie zależności
- Testy asynchroniczne i pomiar wydajności