매크로 테스트와 디버깅
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 outputassertMacroExpansion
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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.