Konfiguracja XCTestCase, sprzątanie i metody testowe
Strukturyzowanie klas testowych za pomocą setUp/tearDown i nazywanie metod testowych.
Konfiguracja XCTestCase, sprzątanie i metody testowe to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 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.
Podstawy XCTestCase
XCTestCase to klasa bazowa wszystkich testów jednostkowych Swift. Każda metoda zaczynająca się od „test” jest przypadkiem testowym.
import XCTest
final class MathTests: XCTestCase {
func testAddition() {
XCTAssertEqual(2 + 2, 4)
}
}setUp i tearDown
setUp() jest uruchamiana przed każdym testem. tearDown() jest uruchamiana po każdym teście. Używaj ich do inicjalizowania współdzielonego stanu i sprzątania.
final class UserServiceTests: XCTestCase {
var sut: UserService!
override func setUp() {
super.setUp()
sut = UserService()
}
override func tearDown() {
sut = nil
super.tearDown()
}
}setUpWithError i tearDownWithError
Warianty setUp/tearDown zgłaszające błędy: jeśli konfiguracja zgłosi błąd, test zostanie automatycznie oznaczony jako nieudany.
override func setUpWithError() throws {
sut = try UserService(config: loadTestConfig())
}
override func tearDownWithError() throws {
try sut.cleanup()
}Konfiguracja na poziomie klasy
class setUp() i class tearDown() są uruchamiane raz przed wszystkimi testami w klasie lub po nich — przydają się w przypadku kosztownych współdzielonych zasobów.
final class DBTests: XCTestCase {
static var db: TestDatabase!
override class func setUp() {
super.setUp()
db = TestDatabase.inMemory()
}
override class func tearDown() {
db.close()
super.tearDown()
}
}Nazywanie metod testowych
Nazywaj testy według schematu test_methodName_condition_expectedResult, aby zapewnić czytelność i jasne komunikaty o błędach.
func test_login_withValidCredentials_returnsUser() throws { ... }
func test_login_withInvalidPassword_throwsUnauthorized() throws { ... }addTeardownBlock
Rejestruj bloki sprzątania dla poszczególnych testów bezpośrednio w kodzie, bez nadpisywania tearDown.
func testCreateFile() throws {
let url = FileManager.default.temporaryDirectory.appendingPathComponent("test.txt")
addTeardownBlock { try? FileManager.default.removeItem(at: url) }
// ... test
}Wyłączanie testów
Dodaj prefiks _ do metody testowej lub zakomentuj ją, aby ją pominąć. XCTest obsługuje również pomijanie za pomocą XCTSkipIf.
func testExperimentalFeature() throws {
try XCTSkipIf(ProcessInfo.processInfo.environment["CI"] != nil, "Skip on CI")
// ... test
}Metody testowe nie mogą zgłaszać błędów (przed Xcode 16)
We wcześniejszych wersjach Xcode metody testowe zadeklarowane jako throws propagują błędy jako niepowodzenia testów za pośrednictwem XCTAssertNoThrow.
func testDecode() throws {
let user = try JSONDecoder().decode(User.self, from: validJSON)
XCTAssertEqual(user.name, "Alice")
}Jawne oznaczanie testu jako nieudanego
Wywołaj XCTFail("reason"), aby wymusić niepowodzenie testu z opisowym komunikatem.
func testCallback() {
var called = false
service.doWork { called = true }
if !called { XCTFail("Callback was never invoked") }
}Plany testów
Plany testów Xcode pozwalają uruchamiać te same testy z różnymi konfiguracjami, takimi jak język, zmienne środowiskowe czy sanitizery.
// File → New → Test Plan
// Add test targets and configure per-configuration env vars
// Useful for running localized UI tests or with Address SanitizerTestowanie równoległe
Włącz testowanie równoległe w ustawieniach schematu Xcode, aby uruchamiać klasy testowe jednocześnie i skrócić łączny czas testów.
// Product → Scheme → Test → Options → Execute in parallel
// Each XCTestCase class runs in a separate process
// Ensure tests are independent and don't share global stateSzybkie sprawdzenie
Która metoda XCTestCase jest uruchamiana raz przed wszystkimi testami w klasie, a nie przed każdym pojedynczym testem?
Podsumowanie lekcji
Nadpisuj setUp/tearDown lub ich warianty zgłaszające błędy, aby konfigurować i sprzątać stan dla każdego testu. Używaj class setUp/tearDown dla zasobów tworzonych raz na klasę. Nadawaj testom opisowe nazwy. Używaj addTeardownBlock do sprzątania bezpośrednio w kodzie oraz XCTSkipIf do warunkowego pomijania testów.
Często zadawane pytania
Czy lekcja „Konfiguracja XCTestCase, sprzątanie i metody testowe” jest bezpłatna?
Tak — pełny tekst „Konfiguracja XCTestCase, sprzątanie i metody testowe” 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 „Konfiguracja XCTestCase, sprzątanie i metody testowe”?
Strukturyzowanie klas testowych za pomocą setUp/tearDown i nazywanie metod testowych. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Konfiguracja XCTestCase, sprzątanie i metody testowe”?
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