Swift Testing’e Geçiş
- Cem Ozturk
- Development , Testing , Wwdc , Software
- February 27, 2025
Table of Contents
5 dakika okuma süresi | February 27, 2025
Cem Ozturk yazdı.
[[development]] - [[magazine]] - [[wwdc]]
Swift Testing Nedir?
Apple’ın WWDC 2024’te duyurduğu Swift Testing, XCTest’in mirasını alarak gelen, Swift dilinin ruhuna uygun şekilde tasarlanmış modern bir test framework’üdür. Sade ve okunabilir syntax’ı, async/await desteği ve hiyerarşik test yapılarıyla, geliştiricilerin test yazma deneyimini iyileştirmeyi hedefliyor. XCTest’e kıyasla daha az boilerplate, daha fazla esneklik ve hata ayıklama süreçlerinde netlik vadeden Swift Testing, geliştiriciler tarafından kısa sürede büyük ilgi gördü.
Bu yazıda sizlere, Apple’ın yeni test framework’ü Swift Testing’in getirdiği yeniliklerden ve mevcut testlerinizi bu yeni framework’e taşımadan önce bilmeniz gerekenlerden bahsedeceğim.
Öncesi ve Sonrası
Hiç şüphesiz test yazmak, yazılım geliştirme sürecinin vazgeçilmez bir parçasıdır. Hem kod kalitesini artırmak hem de hataları erken aşamada yakalamak için kritik bir rol oynar. Çalıştığımız projelerde test yazmayı bazen ihmal etsek de, bunun ne kadar önemli olduğunun hepimiz farkındayız.
Şimdi gelin, XCTest ile test yazma sürecimizi hatırlayıp, Swift Testing ile bu sürecin nasıl daha basit ve verimli hale geldiğini görelim.
import XCTest
class UserManagerTests: XCTestCase {
var userManager: MockUserManager!
override func setUp() {
super.setUp()
userManager = MockUserManager()
}
override func tearDown() {
userManager = nil
super.tearDown()
}
func testUserRegistration() {
// Given
let user = User(name: "Ted", email: "[email protected]")
// When
let isRegistered = userManager.register(user)
// Then
XCTAssertTrue(isRegistered)
}
}
Yukarıda, kullanıcı kayıt işlemlerinin test edilmesi amacıyla yazılmış örnek bir unit test metodu görüyoruz. İlk göze çarpanları şöyle bir inceleyelim:
XCTest ile yazılan testler:
- Bir class içinde tanımlanır ve
XCTestCase’den türetilmesi zorunludur. - Test metodları
testön ekiyle başlar. - Assertion’lar için
XCTAssertfonksiyonlarından uygun olan bir alternatif kullanılır. - Her test metodundan önce çalıştırılan
setUp()ve sonra çalıştırılantearDown()metodları bulunur. Bunlar, testler için ortam hazırlamak, kaynakları temizlemek ve testlerin birbirini etkilemesini önlemek için kullanılır.
import SwiftTesting
@Suite
struct UserManagerTests {
var userManager: MockUserManager
init() {
userManager = MockUserManager()
}
@Test
func userRegistration() {
// Given
let user = User(name: "Ted", email: "[email protected]")
// When
let isRegistered = userManager.register(user)
// Then
#expect(isRegistered)
}
}
Swift Testing ile yazılan testler:
- Struct veya class içinde tanımlanmak zorunda değildir. Ancak tanımlanabilir. Ayrıca
XCTestCasegibi belirli bir sınıftan türetilmesi de gerekmez. - Test metodları için özel bir ön ek (örneğin
test) kullanma zorunluluğu yoktur. Metotlar,@Testattribute’u ile işaretlendiği sürece test metodu olarak kabul edilir. - Assertion’lar için
#expect()gibi Swift Testing’e özel macro’lar kullanılır. Bu fonksiyonlar, test koşullarını değerlendirir ve daha modern bir syntax sunar. - Test metodu başına hazırlık ve temizlik işlemleri için
initvedeinitkullanılabilir. Bu, XCTest’tekisetUp()vetearDown()metodlarına benzer bir işlev sunar, ancak Swift’in doğal yaşam döngüsü (lifecycle) mekanizmalarını kullanır.
Swift Testing’e Geçiş ve Birlikte Çalışabilirlik
Swift Testing’e geçiş yaparken mevcut testlerimizi tümüyle değiştirmemiz gerekmiyor. Peki, Swift Testing’i projelerimize entegre ederken nelere dikkat etmemiz gerekiyor?
✅ Tek Bir Test Target’ı Paylaşın:
Swift Testing testleri, XCTest’lerle aynı test target’ında birlikte çalışabilir. Böylelikle Swift Testing’e geçiş yaparken XCTest’ten tamamen kurtulmak zorunda kalmayız. Bu, geçiş sürecimizi kolaylaştırır.
✅ “test” Ön Ekini Kaldırın:
Swift Testing’de metod isimlerinin “test” ön eki ile başlaması gerekmez. Bu, metod isimlerimizın daha anlamlı ve okunabilir olmasını sağlar.
🚫 UI Otomasyon ve Performans Testleri için XCTest Kullanmaya Devam Edin:
Swift Testing, henüz UI otomasyon ve performans testlerini desteklemiyor. Bu tür testler için XCTest kullanmaya devam etmeliyiz.
🚫 Objective-C Kodları için XCTest Kullanın:
Swift Testing, Objective-C’yi desteklemez. Objective-C ile yazılmış testler için XCTest kullanmaya devam etmeliyiz.
Sonuç
Swift Testing, daha “Swifty” bir çözüm olarak, XCTest’in yıllardır bize sunduğu temelin üzerine modern bir yaklaşım inşa ediyor. Daha sade, okunabilir ve Swift dilinin ruhuna uygun bir syntax ile test yazma deneyimini kolaylaştırıyor. Mevcut XCTest testleriyle uyumlu bir geçiş süreci sunarak, biz geliştiricilerin bu yeniliğe adım adım adapte olmasını sağlıyor.
Henüz UI otomasyonu ve performans testleri gibi bazı alanlarda eksiklikleri olsa da, güçlü özellikleriyle kod kalitesini artırmak isteyen bizler için yenilikçi bir alternatif haline geliyor.
Kısacası, Swift Testing’e geçiş, bizler için test yazmayı daha keyifli ve verimli hale getirebilir. Biz geliştiricilerin bu yeni framework’ü nasıl benimseyeceği ve şekillendireceği ise önümüzdeki dönemde daha net bir şekilde ortaya çıkacak.
Bu yazıda sizlere kısaca Swift Testing‘in getirdiklerinden ve geçiş öncesi bilmeniz gerekenlerden bahsettim. Eğer Swift Testing ile beraber gelen yeniliklere daha detaylı bakmak isterseniz, sonraki yazılarımda buluşalım. Şimdilik benden bu kadar. Hoşca kalın! 🏄🏼♂️