ستكون هذه المقالة صغيرة ، وسأخبرك عن المشكلات التي نشأت عند إنشاء هدف للاختبار في مشروع ObjectiveC + Swift مختلط وقديم إلى حد ما ، وكيف تمكنت من حلها.
أول شيء مثير للارتباك: يمكن أن يؤثر خطأ في هدف اختبار واحد على بدء الاختبار التلقائي من هدف اختبار آخر. يمكنك إضافة أي عدد من الأهداف للاختبار في المشروع ، فهي تستند عادةً إلى الهدف الرئيسي للمشروع ، وتتم إضافتها تلقائيًا إلى مخطط الإطلاق الخاص به. وبالتالي ، عند تشغيل أي اختبار تلقائي على هذا المخطط ، سيتم تجميع الباقي ، وسوف يتداخل خطأ في أحد رسوم الاختبار مع إطلاق البرامج الأخرى. لعزل هذا التأثير ، يمكنك إنشاء أنظمة مختلفة لأهداف اختبار مختلفة.
سوف أرفق لقطة شاشة تافهة للغاية ، فقط من أجل الوضوح:


العدد التالي هو التبعيات بين Objecive-C و Swift.
في مشروعك تم إنشاؤه:
MyProject-Bridging-Header.h : يحتوي هذا الملف على أسماء ملفات رأس ObjectiveC المستخدمة بسرعة.
MyProject-swift.h : يقوم بإنشاء ضمنيًا رمز الفئات السريعة المستخدمة في فئات ObjectiveC.
MyProject-Prefix.pch : قد يحتوي ملف
التجميع المسبق أيضًا على تبعيات بطرق مختلفة ، بما في ذلك إنشاءات النوع:
#ifdef __OBJC__ #import "MyProject-Swift.h" #endif
يمكن autotests الخاص بك أيضا إنشاء مثل هذه التبعيات. عند إضافة أول ملف سريع ، يقدم Xcode إنشاء ملف رأس جسر لهذا الهدف من الاختبار. كل شيء يعمل مثل السحر. من الناحية النظرية ، ينبغي أن تكون محتويات الاختبار الذاتي لرأس الجسر مكملة للجسر الرئيسي ، ولكن في الواقع ، يحدث بديل. لذلك ، من أجل الوصول إلى جميع فئات المشروع في الاختبار التلقائي ، في هذا الخيار ، حدد رأس جسر الهدف الرئيسي (الصورة أعلاه).
انتقل إلى Xcode
Target -> BuildSetting وتحقق من المعلمات التالية:
الهدف ج سد رأسالهدف - رأس اسم واجهة إنشاء الهدفحدد الملفات المستهدفة الرئيسية.
ومع ذلك ، إذا قمت بسحب رأس الجسر الرئيسي ، فإن كل التبعيات تبدأ في التمدد. لذلك ، يجب عليك أيضًا ملء المعلمات التالية ببيانات من المشروع الرئيسي:
مسارات البحث الإطاريةمسارات البحث رأسمسار البحث في المكتبةأعلام رابط أخرىمسارات بحث Runpath لا تحتاج إلى تغيير.
ثم تم اكتشاف مشكلة غريبة أخرى:
لسبب ما ، في المشروعات القديمة ، يتم تعيين هدف الاختبار بنفس
اسم الوحدة النمطية للمنتج كالاسم الرئيسي. هذا لم يوقف ObjectiveC الوحيد ، ولكن عند إضافة سريعة إلى المشروع ، تنشأ مشكلتان.
المشكلة الأولى هي أنه في هذه الحالة
@testable import MyProject
يتم تجاهل ملف الاختبار التلقائي ولا يمكنك الوصول إلى فئات Swift.
المشكلة الثانية هي أن مثل هذا الهدف عند التحويل البرمجي يقوم بالكتابة فوق MyProject-swift للهدف الرئيسي ويمنع الأهداف الأخرى من التحويل البرمجي. هذه المعلمة تحتاج إلى إعادة تسمية.
في هذا ، بدأ الاختبار التلقائي الخاص بي وتمكّن من استخدام ملفات المشروع ، والتي أتمنى لك أيضًا!
لا أعمل غالبًا على إنشاء مشروع ، لذا نرحب بجميع التعليقات والنصائح العملية حول هذا الموضوع.
شكرا لكل من قرأها