سؤال

هل هناك أي طريقة لضمان أن المشاركات الطبقي NSNotification وجه الخصوص؟

و(لدي مجموعة من الطبقات، وأود أن فرض في الترجمة الوقت (إن أمكن) أن الوظائف الفئة (أ) NSNotification مطلوب).

وبدلا من ذلك، إذا لم يكن ذلك ممكنا، هل هناك أي الحل؟

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

المحلول

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

ويمكنك، ومع ذلك، القيام بذلك مع وحدة الاختبارات، منذ عداء اختبار يعمل في الواقع رمز تحت الاختبار.

وستحتاج إلى إنشاء هدف الاختبار حزمة، إذا لم تقم بذلك بالفعل. سوف تستهدفها استخدام SenTestingKit لتشغيل الاختبارات، والتي تقوم بإنشائها. (على اي فون، وعليك أيضا بحاجة جوجل أدوات لل، اه، ماك، ولديهم <لأ href = "http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting" يختلط = "نوفولو noreferrer"> تعليمي مفيد على استخدام GTM آيفون اختبارات ).

وعليك إنشاء فئة فرعية SenTestCase لاختبار ما إذا المشاركات جوه حقيقية بك إعلام. انها سوف ننظر بشيء من هذا القبيل:

@interface FrobnitzerNotificationsTest: SenTestCase
{
    BOOL frobnitzerDidCalibrate;
}

- (void) frobnitzerDidCalibrate:(NSNotification *)notification;

@end

@implementation FrobnitzerNotificationsTest

- (void) testFrobnitzerCalibratePostsNotification {
    Frobnitzer *frobnitzer = …;
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

    [nc addObserver:self
        selector:@selector(frobnitzerDidCalibrate:)
        name:FrobnitzerDidCalibrate
        object:frobnitzer];

    frobnitzerDidCalibrate = NO;

    //This should post a notification named FrobnitzerDidCalibrate with the receiver as the object.
    [frobnitzer calibrate];
    //If it did, our notification handler set frobnitzerDidCalibrate to YES (see below).

    [nc removeObserver:self
        name:FrobnitzerDidCalibrate
        object:frobnitzer];

    STAssertTrue(frobnitzerDidCalibrate, @"Frobnitzer did not post a notification when we told it to calibrate");
}

- (void) frobnitzerDidCalibrate:(NSNotification *)notification {
    frobnitzerDidCalibrate = YES;
}

@end

وستحتاج واحد متغير مثيل واحد طريقة إعلام معالج كل إشعار تريد اختبار، وطريقة الاختبار واحد لكل الطريقة التي تريد اختبار الإخطارات.

وأيضا، إذا كان استخدام GTM، يجب استبدال GTMSenTestCase لSenTestCase أعلاه.

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