اختبار الماكروهات وتصحيحها
اكتبوا اختبارات وحدات لتوسعات الماكرو باستخدام assertMacroExpansion.
اختبار الماكروهات وتصحيحها درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في 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]
)
}
}اختبار الماكروات المرفقة
قدّموا struct أو class الذي طُبّق عليه الماكرو كإدخال، وقدّموا الشيفرة المصدرية الموسّعة بالكامل كمخرجات متوقعة.
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 أو print إلى stderr لتصحيح منطق الماكرو أثناء التطوير.
// In macro implementation:
print("[StringifyMacro] expanding: \(node.description)", to: &standardError)نقاط التوقف في اختبارات الماكرو
بما أن الماكروات تعمل ضمن العملية أثناء الاختبارات، يمكنكم تعيين نقاط توقف في Xcode داخل تطبيقات الماكرو أثناء تشغيل الاختبارات.
// Set a breakpoint in StringifyMacro.expansion()
// Run the test target — breakpoints are hitفحص شجرة بناء الجملة
استخدموا .debugDescription في SwiftSyntax لطباعة شجرة بناء الجملة الكاملة لعقدة إدخال بغرض تصحيح الأخطاء.
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 أخرى: نفّذوا swift test في دليل الحزمة.
// CI command:
swift test --package-path MyMacrosاختبار سريع
ما الدالة التي تتحقق من توسعة الماكرو إلى الشيفرة المصدرية المتوقعة في اختبار وحدة؟
مراجعة الدرس
اختبروا الماكروات باستخدام assertMacroExpansion للتحقق من المخرجات الصحيحة، وDiagnosticSpec لحالات الخطأ. صحّحوا الأخطاء باستخدام معاينة التوسعة في Xcode ونقاط التوقف داخل العملية أثناء تشغيل الاختبارات. وشغّلوا الاختبارات عبر swift test في CI.
الأسئلة الشائعة
هل درس «اختبار الماكروهات وتصحيحها» مجاني؟
نعم — نص درس «اختبار الماكروهات وتصحيحها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختبار الماكروهات وتصحيحها»؟
اكتبوا اختبارات وحدات لتوسعات الماكرو باستخدام assertMacroExpansion. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «اختبار الماكروهات وتصحيحها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أدوار الماكرو: مستقل مقابل ملحق
- كتابة ماكرو تعبير مستقل
- ماكروهات الأعضاء الملحقة لتقليل الشيفرة المتكررة
- اختبار الماكروهات وتصحيحها