Question

Y at-il moyen de faire en sorte que les messages d'un de classe un NSNotification particulier?

(j'ai un ensemble de classes, et je voudrais appliquer à la compilation (si possible) que les postes de classe un NSNotification nécessaire).

Par ailleurs, si cela est impossible, est-il solution?

Était-ce utile?

La solution

Il est fondamentalement impossible de prévoir au moment de la compilation ce qui se passera au moment de l'exécution. Le plus proche, vous pouvez obtenir est l'analyse statique, mais même cela ne peut pas prédire tout ce qui se passe en dehors de votre propre code, comme à l'intérieur Fondation.

Vous pouvez cependant faire avec des tests unitaires, puisque le coureur de test fonctionne en fait le code en cours de test.

Vous devez créer une cible de faisceau de test, si vous avez pas déjà. Votre cible utilisera SenTestingKit pour exécuter vos tests que vous créez. (Sur l'iPhone, vous aurez également besoin de Google Toolbox pour, euh, Mac. Ils ont un tutoriel pratique sur l'utilisation GTM pour les tests de l'iPhone .)

Vous allez créer une sous-classe SenTestCase pour vérifier si vos messages réels objet d'une notification. Ça va ressembler à quelque chose comme ceci:

@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

Vous aurez besoin d'une variable d'instance et une méthode de notification de gestionnaire pour chaque notification que vous souhaitez tester, et une méthode d'essai pour chaque méthode que vous voulez tester les notifications.

En outre, si vous utilisez GTM, vous devez remplacer GTMSenTestCase pour SenTestCase ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top