إعداد اختبارات وحدة في مشاريع سويفت + الهدف جيم

ستكون هذه المقالة صغيرة ، وسأخبرك عن المشكلات التي نشأت عند إنشاء هدف للاختبار في مشروع 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 للهدف الرئيسي ويمنع الأهداف الأخرى من التحويل البرمجي. هذه المعلمة تحتاج إلى إعادة تسمية.

في هذا ، بدأ الاختبار التلقائي الخاص بي وتمكّن من استخدام ملفات المشروع ، والتي أتمنى لك أيضًا!
لا أعمل غالبًا على إنشاء مشروع ، لذا نرحب بجميع التعليقات والنصائح العملية حول هذا الموضوع.

شكرا لكل من قرأها

Source: https://habr.com/ru/post/ar460961/


All Articles