كيف يمكنني الهجرة من سينتستينغكيت/أوكونيت إلى شكتست?

StackOverflow https://stackoverflow.com//questions/20022512

  •  21-12-2019
  •  | 
  •  

سؤال

أنا في عملية ترحيل مشروعي من كسكودي 4.6.3 إلى كسكودي 5.0.2.تم تطوير اختبارات وحدة المشروع مع سينتستينغكيت / أوكونيت.الآن عندما أقوم بتشغيل الاختبارات في كسكودي 5 ، أحصل على خطأ من RunUnitTests نص يقول لي ذلك

رونونيتيستس عفا عليها الزمن.

ربما ذات الصلة هي هذه المذكرة في هكود 5 ملاحظات الإصدار:

يتم إهمال سينتستينغكيت و أوكونيت.استخدم المهاجر للانتقال إلى شكتست.

لسوء الحظ ، لم أتمكن من معرفة المزيد عن هذا "المهاجر"الغامض.ربما بلدي جوجل فو تفتقر [مرة أخرى] ، لذلك سؤالي الرئيسي هو:كيف يمكنني ترحيل اختبارات وحدة من سينتستينغكيت / أوكونيت إلى شكتست جديد (مع أو بدون "مهاجر")?

سؤال ثانوي ، في حالة الهجرة هو عمل معقد:هل من الممكن الحصول على كسكودي 5 لتشغيل اختبارات الوحدة التي لا تزال تستند إلى سينتستينغكيت/أوكونيت?بعد كل هذه هي مجرد إهمال ، لذلك ينبغي أن يكون لا يزال حولها وظيفية.

هل كانت مفيدة؟

المحلول

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


الجزء 1:كيفية الهجرة من أوكونيت إلى شكتست

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

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

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

  1. قم بإزالة مرحلة إنشاء "تشغيل البرنامج النصي" من هدف اختبار الوحدة
  2. تغيير الفئة الأساسية لجميع فئات حالة الاختبار من SenTestCase إلى XCTestCase
  3. تغيير رأس المستوردة من <SenTestingKit/SenTestingKit.h> إلى <XCTest/XCTest.h>
  4. في إعدادات بناء هدف الاختبار ، قم بتغيير امتداد الغلاف من octest إلى xctest.
  5. إعادة تسمية كافة وحدات الماكرو تأكيد من ST* إلى XCT* (على سبيل المثال. STAssertTrue يصبح XCTAssertTrue)
  6. استثناء لما سبق: STAssertEquals يحتاج إلى إعادة تسميته إلى XCTAssertEqual (لاحظ المفقودين "ليالي" في نهاية).ستعرف أنك نسيت هذا إذا تلقيت تحذير المترجم هذا: warning: implicit declaration of function 'XCTAssertEquals' is invalid in C99
  7. وحدات الماكرو تأكيد شكتست الجديدة لا تسمح nil أن يتم تمريرها على أنها وصف الفشل.على سبيل المثال, XCTAssertNotNil(anObject, nil) غير ممكن ويجب تغييره إلى XCTAssertNotNil(anObject).ستعرف أن لديك هذه المشكلة عندما تحصل على خطأ المترجم هذا: error: called object type 'NSString *' is not a function or function pointer.
  8. إذا كنت هل تحتاج إلى تمرير وصف الفشل ، تتطلب وحدات الماكرو تأكيد زكتست الجديدة تعبيرا ثابتا لمحدد التنسيق ، تماما كما NSString طريقة الفصل stringWithFormat: هل.ستعرف أن لديك هذه المشكلة عندما تحصل على خطأ المترجم هذا: error: expected ')'.بعض الأمثلة:
NSString* formatSpecifier = @"%@";
NSString* failureDescription = @"foo";
// These are OK
XCTAssertNotNil(anObject, @"foo")
XCTAssertNotNil(anObject, @"%@", failureDescription)
// These are not OK
XCTAssertNotNil(anObject, failureDescription);
XCTAssertNotNil(anObject, formatSpecifier, failureDescription);

وأخيرا وليس آخرا ، كما سبق ذكره أبعد من ذلك ، يجب إضافة الإشارة إلى إطار شكتست إلى هدف اختبار الوحدة.ستعرف أنك نسيت هذا إذا حصلت على أخطاء رابط مثل Undefined symbols for architecture i386: "_OBJC_CLASS_$_XCTestCase", referenced from: foo.

كسكودي 6 تحديث:ربط ضد شكتست لم يعد مطلوبا في كسكودي 6 (في الواقع لم يتم سرد شكتست حتى كإطار متاح بعد الآن).بدلا من ذلك ، قم بتعيين وحدات ضبط الإنشاء على نعم (مكشوفة في واجهة المستخدم كـ "تمكين الوحدات النمطية (ج والهدف-ج)").هذا سوف يسبب clang لربط تلقائيا ضد شكتست عندما يرى #import <XCTest/XCTest.h> بيان.التفاصيل متوفرة في قسم "وحدات" من وثائق رنة.


الجزء 2:كيفية تشغيل اختبارات أوكونيت في كسكودي 5

عند هذه النقطة حصلت على خطأ رابط جعلني أدرك أن مهمتي للهجرة إلى شكتست قد فشلت.السبب:شكتست ليست جزءا من سك 6.1 ، ولكن ما زلت بناء مشروعي مع قاعدة سك دائرة الرقابة الداخلية 6.1 (هذا حتى الإجابة يشرح كيفية دمج سك 6.1 في كسكودي 5).

وبما أنني غير قادر على الاستمرار في الهجرة ، فإن الحل في الوقت الحالي هو الحفاظ على اختبارات الوحدة الخاصة بي على أساس سينتستينغكيت/أوكونيت ، حتى أجد الوقت لترقية التطبيق الخاص بي إلى دائرة الرقابة الداخلية 7.هذا ما كان علي القيام به من أجل تشغيل اختبارات الوحدة:

  1. قم بإزالة مرحلة إنشاء "تشغيل البرنامج النصي" من هدف اختبار الوحدة.هذا هو كل ما هو مطلوب للسماح كسكودي تنفيذ اختبارات وحدة عن طريق" اختبار " العمل ( + U) أثناء تحديد هدف اختبار الوحدة.
  2. هذا ليس مثاليا ، لأنني لا أريد تبديل الأهداف فقط لتنفيذ اختبارات الوحدة.بدلا من ذلك أريد تنفيذ اختبارات الوحدة بينما يتم تحديد الهدف الرئيسي.وبالتالي فإن الخطوة الثانية هي تعديل مخطط كسكودي الهدف الرئيسي بحيث عندما أقوم بتشغيل إجراء" اختبار " ، يتم تنفيذ اختبارات هدف اختبار الوحدة بدلا من ذلك.

الحل النهائي ليست جيدة كما هو الحال في كسكودي 4.س حيث تم تنفيذ اختبارات وحدة تلقائيا في كل مرة أن ركضت الهدف الرئيسي "تشغيل" أو "بناء" العمل.لسوء الحظ ، يبدو أنه لا يمكنني تشغيل هذا بدون مرحلة بناء "تشغيل البرنامج النصي".

نصائح أخرى

تحرير -> Refactor -> تحويل إلى XCTEST

لا تزال اختبارات ocunit العمل، ولكن قد ترحيل جيدا.التغييرات في نهاية المطاف كونها ضئيلة للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top