Swift Academy · Lektion

Testa och felsöka makron

Skriv enhetstester för makroexpansioner med assertMacroExpansion.

Lektion 4 av 413 steg

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 output

assertMacroExpansion

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 hit

Inspektera 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 hierarchy

Testa 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 MyMacros

Snabbkontroll

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.

Gratis att börja

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

  1. Makroroller: fristående kontra bundna
  2. Skriv ett fristående uttrycksmakro
  3. Bundna medlemsmakron för mindre boilerplate
  4. Testa och felsöka makron
← Tillbaka till Swift Academy