← back to blog
[Blog]

Neden Swift Testing Kullanalim?

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’ü.

Cem Ozturk 3 min read
#unit-test#development#xcode

Unit Test Deneyimini Iyilestirmek

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’ü. Sade ve okunabilir syntax’ı, async/await desteği ve hiyerarşik test yapılarıyla, biz geliştiricilerin test yazma deneyimini iyilestirmeyi hedefliyor. XCTest’e kıyasla daha az boilerplate, daha fazla esneklik ve hata ayıklama süreçlerinde netlik vadeden bu araç, coktan gelistiriciler tarafindan bolca sempati topladi.

Oncesi ve Sonrasi

Hic suphesiz test yazmak yazilim gelistirme surecinin vazgecilmez bir parcasidir. Hem kod kalitesini arttirmak hem de hatalari erken asamada yakalamak icin kritik bir rol oynar. Calistigimiz projelerde test yazmayi bazen ihmal de etsek, bunun nasil bir onem tasidiginin hepimiz farkindayiz.

Simdi gelin, uzun yillar boyunca bizim kahrimizi ceken XCTest ile yeni duyurulan Swift Testing framework’unun kullanimina yakindan bakalim.

import XCTest

class UserManagerTests: XCTestCase {
	var userManager: MockUserManager! 
 
	override func setUp() {
		super.setUp()
		userManager = MockUserManager()
	}
  
	override func tearDown() {
		userManager = nil
		super.tearDown()
	}

	func test_userRegistration() {
	 // Given
	 let user = User(name: "Ted", email: "[email protected]")
 
	 // When
	 let isRegistered = userManager.register(user)
 
	 // Then
	 XCTAssertTrue(isRegistered)
	 }
}

Yukarida registration islemlerinin test edilmesi amaciyla yazilmis ornek unit test metodlarini goruyoruz.

Ilk goze carpanlari soyle bir incelyelim.

XCTest ile yazılan testler:

  1. Bir class içinde tanımlanır ve XCTestCase’den türetilmesi zorunludur.
  2. Test metodları test prefix’i ile başlar.
  3. Assertion’lar için XCTAssert fonksiyonlarından test case icin uyumlu olan bir alternatifi kullanılır.
  4. 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 yazilan testler:

  1. Bir class içinde tanımlanmak zorunda değildir; @Test attribute’u ile doğrudan fonksiyonlar test olarak işaretlenebilir.
  2. Test metodlarının test ile başlaması zorunluluğu yoktur; @Test attribute’u bu gereksinimi ortadan kaldırır.
  3. Assertion’lar için #expect macrosu kullanılır, bu da daha basit ve okunabilir bir syntax sunar.
  4. Setup ve Teardown işlemleri, @Test içinde veya @Suite ile hiyerarşik olarak yönetilebilir.
XCTestSwift Testing
try XCTUnwrap(x)try # require(x)
XCTFail(“Unexpected Failure”)Issue.record(“Unexpected Failure”)

References

← back to blog