Testa och felsöka makron
Skriv enhetstester för makroexpansioner med assertMacroExpansion.
Testa och felsöka makron är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Varför testa makron?
Makron genererar kod vid kompilering. Enhetstester verifierar den genererade källkoden innan den når produktionen.
// The swift-syntax package ships SwiftSyntaxMacrosTestSupport
// with assertMacroExpansion for testing macro outputassertMacroExpansion
assertMacroExpansion tar emot källkod som indata och den förväntade expanderade källkoden och verifierar att de överensstämmer.
import SwiftSyntaxMacrosTestSupport
import XCTest
final class StringifyMacroTests: XCTestCase {
func testStringify() throws {
assertMacroExpansion(
"#stringify(1 + 2)",
expandedSource: "(1 + 2, \"1 + 2\")",
macros: ["stringify": StringifyMacro.self]
)
}
}Testa anslutna makron
Ange den dekorerade structen eller klassen som indata och den fullständigt expanderade källkoden som förväntat resultat.
assertMacroExpansion(
"@AddID struct User { var name: String }",
expandedSource: """
struct User {
var name: String
var id = UUID()
}
""",
macros: ["AddID": AddIDMacro.self]
)Testa diagnostikutmatning
Verifiera att makrot genererar rätt diagnostik, varning eller fel, när det används felaktigt.
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]
)Expandera makron i Xcode
Högerklicka på ett makroanrop i Xcode och välj Expandera makro för att granska den genererade koden direkt i källan.
// Before expansion:
let (v, s) = #stringify(1 + 2)
// After:
let (v, s) = (1 + 2, "1 + 2")Felsökning med print i makron
Använd context.diagnose eller print till stderr för att felsöka makrologik under utvecklingen.
// In macro implementation:
print("[StringifyMacro] expanding: \(node.description)", to: &standardError)Brytpunkter i makrotester
Eftersom makron körs i samma process under tester kan ni ange brytpunkter i makroimplementationerna under testkörningar i Xcode.
// Set a breakpoint in StringifyMacro.expansion()
// Run the test target — breakpoints are hitInspektera syntaxträdet
Använd SwiftSyntaxs .debugDescription för att skriva ut hela syntaxträdet för en indatanod vid felsökning.
print(node.debugDescription)
// Prints the full SyntaxTree hierarchyTesta varianter med flera argument
Skriv ett test för varje distinkt argumentform för att säkerställa att alla kodvägar i makrot testas.
func testNoArgument() {
assertMacroExpansion(
"#stringify()",
expandedSource: "#stringify()",
diagnostics: [DiagnosticSpec(message: "Need an argument", line: 1, column: 1)],
macros: ["stringify": StringifyMacro.self]
)
}Integrationstestning
Lägg till ett testapp-target som faktiskt använder makrot. Bekräfta kompilering och beteende vid körning.
// In test app:
let (val, src) = #stringify(Date.now)
XCTAssertEqual(src, "Date.now")CI för makrotester
Kör makrotester i CI precis som för vilket Swift-paket som helst: swift test i paketets katalog.
// CI command:
swift test --package-path MyMacrosSnabbkontroll
Vilken funktion verifierar att ett makro expanderas till den förväntade källkoden i ett enhetstest?
Lektionssammanfattning
Testa makron med assertMacroExpansion för korrekt resultat och DiagnosticSpec för felfall. Felsök med Xcodes förhandsvisning av expansionen och brytpunkter i samma process under testkörningar. Kör via swift test i CI.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Testa och felsöka makron” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Testa och felsöka makron”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Testa och felsöka makron”?
Skriv enhetstester för makroexpansioner med assertMacroExpansion. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Testa och felsöka makron”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Makroroller: fristående kontra bundna
- Skriv ett fristående uttrycksmakro
- Bundna medlemsmakron för mindre boilerplate
- Testa och felsöka makron