2009-10-23 7 views
4

J'essaie d'écrire un test pour une méthode où la sortie dépend de la valeur de retour timeIntervalSinceNow d'un NSDate. Je voudrais spécifier la valeur de retour dans mes tests afin que je puisse tester certains scénarios.OCMock renvoyant des valeurs

J'ai vraiment du mal à obtenir cet objet OCMock retournant ce que je voudrais. Voici mon code:

id mock = [OCMockObject mockForClass:[NSDate class]]; 
NSTimeInterval t = 20.0; 
[[[mock stub] andReturnValue:OCMOCK_VALUE(t)] timeIntervalSinceNow]; 
STAssertEquals([mock timeIntervalSinceNow], 20.0, @"Should be eql."); 

Ceci génère une erreur ": spécificateur-qualificateur-liste attendue avant l'erreur 'typeof".

Des pensées? Je suis nouveau à ObjC, donc tous les autres conseils connexes sont grandement appréciés.

Merci.

Répondre

5

En fait, il s'agit d'une erreur de compilation, pas d'une erreur OCMock. Cela a quelque chose à voir avec le fonctionnement de la macro OCMOCK_VALUE(t). Elle est définie comme:

#define OCMOCK_VALUE(variable) [NSValue value:&variable withObjCType:@encode(typeof(variable))] 

La directive typeof() ne fait pas partie de C89, alors assurez-vous que vous avez configuré votre compilateur à utiliser - std=gnu89 ou std=gnu99 drapeau. Selon les docs d'Apple, si vous le définissez sur Compiler Default, cela équivaut à gnu89, ce qui est bien aussi.

Ceci est probablement la cause de votre erreur.

+0

Ceci est défini par GCC_C_LANGUAGE_STANDARD dans les propriétés de construction de la cible, est-ce correct? Si c'est le cas, mon lot de test unitaire a déjà la valeur C99. Ceci est pour une application iPhone, sur Xcode 3.1.4, si cela fait une différence. –

+1

désolé, je me suis trompé. Vous devez le définir sur GNU99. –

+0

Cela a fonctionné! Merci beaucoup. –

Questions connexes