Swift Testing’e Geçiş

Swift Testing’e Geçiş

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 XCTAssert fonksiyonlarından uygun olan bir alternatif kullanılır.
  • Her test metodundan önce çalıştırılan setUp() ve sonra çalıştırılan tearDown() 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 XCTestCase gibi 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, @Test attribute’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 init ve deinit kullanılabilir. Bu, XCTest’teki setUp() ve tearDown() 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! 🏄🏼‍♂️

Kaynakça

Share :