فرض أن المشاركات الطبقي NSNotification وجه الخصوص؟
-
21-08-2019 - |
سؤال
هل هناك أي طريقة لضمان أن المشاركات الطبقي 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 أعلاه.