0Pricing
Swift Academy · 강의

매크로 테스트와 디버깅

assertMacroExpansion을 사용해 매크로 확장을 위한 단위 테스트를 작성합니다.

매크로 테스트와 디버깅은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

매크로를 테스트하는 이유

매크로는 컴파일 시간에 코드를 생성합니다. 단위 테스트는 생성된 소스가 실제 제품에 포함되기 전에 이를 검증합니다.

// The swift-syntax package ships SwiftSyntaxMacrosTestSupport
// with assertMacroExpansion for testing macro output

assertMacroExpansion

assertMacroExpansion은 입력 소스와 예상되는 확장 소스를 받아 두 소스가 일치하는지 확인합니다.

import SwiftSyntaxMacrosTestSupport
import XCTest

final class StringifyMacroTests: XCTestCase {
  func testStringify() throws {
    assertMacroExpansion(
      "#stringify(1 + 2)",
      expandedSource: "(1 + 2, \"1 + 2\")",
      macros: ["stringify": StringifyMacro.self]
    )
  }
}

부착형 매크로 테스트하기

장식된 구조체나 클래스를 입력으로 제공하고, 완전히 확장된 소스를 예상 출력으로 제공하십시오.

assertMacroExpansion(
  "@AddID struct User { var name: String }",
  expandedSource: """
  struct User {
    var name: String
    var id = UUID()
  }
  """,
  macros: ["AddID": AddIDMacro.self]
)

진단 메시지 생성 테스트하기

매크로를 잘못 사용했을 때 올바른 진단 메시지(경고 또는 오류)가 생성되는지 확인하십시오.

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에서 매크로 확장하기

Xcode에서 매크로 호출을 마우스 오른쪽 버튼으로 클릭하고 매크로 확장을 선택하면 생성된 코드를 소스 안에서 확인할 수 있습니다.

// Before expansion:
let (v, s) = #stringify(1 + 2)
// After:
let (v, s) = (1 + 2, "1 + 2")

매크로에서 print로 디버깅하기

개발 중 매크로 로직을 디버깅하려면 context.diagnose 또는 stderr로 보내는 print를 사용하십시오.

// In macro implementation:
print("[StringifyMacro] expanding: \(node.description)", to: &standardError)

매크로 테스트에서 중단점 사용하기

테스트 중에 매크로가 동일한 프로세스 안에서 실행되므로 테스트 실행 중 매크로 구현 내부에 Xcode 중단점을 설정할 수 있습니다.

// Set a breakpoint in StringifyMacro.expansion()
// Run the test target — breakpoints are hit

구문 트리 검사

디버깅을 위해 SwiftSyntax의 .debugDescription을 사용하여 입력 노드의 전체 구문 트리를 출력하십시오.

print(node.debugDescription)
// Prints the full SyntaxTree hierarchy

여러 인수 변형 테스트하기

매크로의 모든 코드 경로가 실행되는지 확인하려면 서로 다른 각 인수 형태마다 테스트를 하나씩 작성하십시오.

func testNoArgument() {
  assertMacroExpansion(
    "#stringify()",
    expandedSource: "#stringify()",
    diagnostics: [DiagnosticSpec(message: "Need an argument", line: 1, column: 1)],
    macros: ["stringify": StringifyMacro.self]
  )
}

통합 테스트

매크로를 실제로 사용하는 테스트 앱 대상을 추가하십시오. 컴파일과 런타임 동작을 확인하십시오.

// In test app:
let (val, src) = #stringify(Date.now)
XCTAssertEqual(src, "Date.now")

매크로 테스트를 위한 CI

다른 Swift 패키지와 마찬가지로 CI에서 매크로 테스트를 실행하십시오. 패키지 디렉터리에서 swift test를 실행하면 됩니다.

// CI command:
swift test --package-path MyMacros

빠른 확인

단위 테스트에서 매크로가 예상 소스 코드로 확장되는지 확인하는 함수는 무엇입니까?

수업 요약

올바른 출력은 assertMacroExpansion으로, 오류 사례는 DiagnosticSpec으로 매크로를 테스트하십시오. Xcode의 확장 미리 보기와 테스트 실행 중 동일 프로세스 내 중단점을 사용하여 디버깅하십시오. CI에서는 swift test로 실행하십시오.

자주 묻는 질문

“매크로 테스트와 디버깅” 강의는 무료인가요?

네 — “매크로 테스트와 디버깅” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“매크로 테스트와 디버깅”에서 뭘 배우나요?

assertMacroExpansion을 사용해 매크로 확장을 위한 단위 테스트를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“매크로 테스트와 디버깅” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 매크로 역할: 독립형과 연결형
  2. 독립형 표현식 매크로 작성하기
  3. 상용구를 줄이는 연결형 멤버 매크로
  4. 매크로 테스트와 디버깅
← Swift Academy(으)로 돌아가기