Makroları Sınama ve Hatalarını Ayıklama
assertMacroExpansion kullanarak makro genişletmeleri için birim testleri yazın.
Makroları Sınama ve Hatalarını Ayıklama, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
macro'lar Neden Test Edilir?
macro'lar derleme zamanında kod üretir. Birim testleri, üretilen kaynağı üretime ulaşmadan önce doğrular.
// The swift-syntax package ships SwiftSyntaxMacrosTestSupport
// with assertMacroExpansion for testing macro outputassertMacroExpansion
assertMacroExpansion, girdi kaynağı ile beklenen genişletilmiş kaynağı alır ve bunların eşleştiğini doğrular.
import SwiftSyntaxMacrosTestSupport
import XCTest
final class StringifyMacroTests: XCTestCase {
func testStringify() throws {
assertMacroExpansion(
"#stringify(1 + 2)",
expandedSource: "(1 + 2, \"1 + 2\")",
macros: ["stringify": StringifyMacro.self]
)
}
}Ekli macro'ları Test Etme
Süslenmiş yapı veya sınıfı girdi olarak, tamamen genişletilmiş kaynağı ise beklenen çıktı olarak sağlayın.
assertMacroExpansion(
"@AddID struct User { var name: String }",
expandedSource: """
struct User {
var name: String
var id = UUID()
}
""",
macros: ["AddID": AddIDMacro.self]
)Tanılama İletisi Yayınlamayı Test Etme
macro'nuzun yanlış kullanıldığında doğru tanılama iletisini (uyarı veya hata) yayınladığını doğrulayın.
assertMacroExpansion(
"@AddID class Foo {}",
expandedSource: "class Foo {}",
diagnostics: [
DiagnosticSpec(message: "@AddID can only be applied to structs", line: 1, column: 1)
],
macros: ["AddID": AddIDMacro.self]
)Xcode'da macro'ları Genişletme
Üretilen kodu satır içinde incelemek için Xcode'da bir macro çağrısına sağ tıklayın ve Makroyu Genişlet seçeneğini belirleyin.
// Before expansion:
let (v, s) = #stringify(1 + 2)
// After:
let (v, s) = (1 + 2, "1 + 2")macro'larda print ile Hata Ayıklama
Geliştirme sırasında macro mantığında hata ayıklamak için standart hataya context.diagnose veya print ile çıktı verin.
// In macro implementation:
print("[StringifyMacro] expanding: \(node.description)", to: &standardError)macro Testlerinde Kesme Noktaları
macro'lar testler sırasında aynı işlem içinde çalıştığından, test çalıştırmaları sırasında macro uygulamalarının içine Xcode kesme noktaları yerleştirebilirsiniz.
// Set a breakpoint in StringifyMacro.expansion()
// Run the test target — breakpoints are hitSözdizimi Ağacını İnceleme
Hata ayıklamak amacıyla bir girdi düğümünün tam sözdizimi ağacını yazdırmak için SwiftSyntax'ın .debugDescription özelliğini kullanın.
print(node.debugDescription)
// Prints the full SyntaxTree hierarchyBirden Çok Argüman Çeşidini Test Etme
macro'daki tüm kod yollarının çalıştırıldığından emin olmak için her farklı argüman biçimi için bir test yazın.
func testNoArgument() {
assertMacroExpansion(
"#stringify()",
expandedSource: "#stringify()",
diagnostics: [DiagnosticSpec(message: "Need an argument", line: 1, column: 1)],
macros: ["stringify": StringifyMacro.self]
)
}Tümleştirme Testi
macro'yu gerçekten kullanan bir test uygulaması hedefi ekleyin. Derlemeyi ve çalışma zamanı davranışını doğrulayın.
// In test app:
let (val, src) = #stringify(Date.now)
XCTAssertEqual(src, "Date.now")macro Testleri için CI
macro testlerini diğer Swift paketlerinde olduğu gibi CI'da çalıştırın: paket dizininde swift test.
// CI command:
swift test --package-path MyMacrosKısa Kontrol
Bir birim testinde macro'nun beklenen kaynak koduna genişlediğini hangi işlev doğrular?
Ders Özeti
Doğru çıktıyı doğrulamak için macro'ları assertMacroExpansion ile, hata durumlarını doğrulamak için DiagnosticSpec ile test edin. Test çalıştırmaları sırasında Xcode genişletme önizlemesi ve aynı işlem içindeki kesme noktalarıyla hata ayıklayın. CI'da swift test aracılığıyla çalıştırın.
Sıkça Sorulan Sorular
“Makroları Sınama ve Hatalarını Ayıklama” dersi ücretsiz mi?
Evet — “Makroları Sınama ve Hatalarını Ayıklama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Makroları Sınama ve Hatalarını Ayıklama” dersinde ne öğreneceğim?
assertMacroExpansion kullanarak makro genişletmeleri için birim testleri yazın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Makroları Sınama ve Hatalarını Ayıklama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Makro Rolleri: Bağımsız ve Ekli
- Bağımsız İfade Makrosu Yazma
- Kalıp Kodu Azaltmak için Ekli Üye Makroları
- Makroları Sınama ve Hatalarını Ayıklama