Testing og feilsøking av makroer
Skriv enhetstester for makroutvidelser med assertMacroExpansion.
Testing og feilsøking av makroer er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hvorfor teste makroer?
Makroer genererer kode ved kompilering. Enhetstester verifiserer den genererte kildekoden før den når produksjon.
// The swift-syntax package ships SwiftSyntaxMacrosTestSupport
// with assertMacroExpansion for testing macro outputassertMacroExpansion
assertMacroExpansion tar inn kildekode og forventet utvidet kildekode og kontrollerer at de samsvarer.
import SwiftSyntaxMacrosTestSupport
import XCTest
final class StringifyMacroTests: XCTestCase {
func testStringify() throws {
assertMacroExpansion(
"#stringify(1 + 2)",
expandedSource: "(1 + 2, \"1 + 2\")",
macros: ["stringify": StringifyMacro.self]
)
}
}Teste tilknyttede makroer
Gi den dekorerte struct-en eller klassen som inndata, og den fullstendig utvidede kildekoden som forventet resultat.
assertMacroExpansion(
"@AddID struct User { var name: String }",
expandedSource: """
struct User {
var name: String
var id = UUID()
}
""",
macros: ["AddID": AddIDMacro.self]
)Teste diagnostikk
Kontroller at makroen sender ut riktig diagnostikk, for eksempel en advarsel eller feil, når den brukes på feil måte.
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]
)Utvide makroer i Xcode
I Xcode høyreklikker du på et makrokall og velger Utvid makro for å inspisere den genererte koden direkte i kildekoden.
// Before expansion:
let (v, s) = #stringify(1 + 2)
// After:
let (v, s) = (1 + 2, "1 + 2")Feilsøking med print i makroer
Bruk context.diagnose eller print til stderr for å feilsøke makrologikk under utvikling.
// In macro implementation:
print("[StringifyMacro] expanding: \(node.description)", to: &standardError)Brytepunkter i makrotester
Fordi makroer kjører i samme prosess under tester, kan du sette Xcode-brytepunkter i makroimplementasjonene mens testene kjører.
// Set a breakpoint in StringifyMacro.expansion()
// Run the test target — breakpoints are hitInspeksjon av syntakstreet
Bruk SwiftSyntax' .debugDescription til å skrive ut hele syntakstreet for en inndatanode under feilsøking.
print(node.debugDescription)
// Prints the full SyntaxTree hierarchyTeste flere argumentvarianter
Skriv én test for hver distinkte argumentform for å sikre at alle kodebaner i makroen blir testet.
func testNoArgument() {
assertMacroExpansion(
"#stringify()",
expandedSource: "#stringify()",
diagnostics: [DiagnosticSpec(message: "Need an argument", line: 1, column: 1)],
macros: ["stringify": StringifyMacro.self]
)
}Integrasjonstesting
Legg til et testappmål som faktisk bruker makroen. Bekreft kompilering og kjøreatferd.
// In test app:
let (val, src) = #stringify(Date.now)
XCTAssertEqual(src, "Date.now")CI for makrotester
Kjør makrotester i CI på samme måte som for alle andre Swift-pakker: swift test i pakkekatalogen.
// CI command:
swift test --package-path MyMacrosKort kontroll
Hvilken funksjon kontrollerer at en makro utvides til den forventede kildekoden i en enhetstest?
Oppsummering av leksjonen
Test makroer med assertMacroExpansion for å kontrollere riktig resultat, og med DiagnosticSpec for feilsituasjoner. Feilsøk med forhåndsvisning av utvidelser i Xcode og brytepunkter i samme prosess under testkjøringer. Kjør testene via swift test i CI.
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «Testing og feilsøking av makroer» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Testing og feilsøking av makroer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Testing og feilsøking av makroer»?
Skriv enhetstester for makroutvidelser med assertMacroExpansion. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Testing og feilsøking av makroer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Makroroller: frittstående kontra tilknyttede
- Skriv en frittstående uttrykksmakro
- Tilknyttede medlemsmakroer for mindre boilerplate
- Testing og feilsøking av makroer