2009-10-23 2 views
4

Я пытаюсь написать тест для метода, в котором результат зависит от значения возвращаемого NSDate времениIntervalSinceNow. Я хотел бы указать возвращаемое значение в своих тестах, чтобы я мог тестировать определенные сценарии.OCMock возвращающие значения

Мне очень тяжело получить этот объект OCMock, возвращающий то, что мне нужно. Вот мой код:

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."); 

Это генерирует «ошибку: ожидаемый список-спецификатор-спецификатор перед ошибкой« typeof ».

Любые мысли? Я новичок в ObjC, поэтому любые другие связанные с этим советы заслуживают высокой оценки.

Спасибо.

ответ

5

Собственно, это ошибка компилятора, а не ошибка OCMock. Это как-то связано с тем, как работает макрос OCMOCK_VALUE(t). Она определяется как:

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

директива TypeOf() не является частью C89, поэтому убедитесь, что вы установили компилятор использовать - std=gnu89 или std=gnu99 флаг. Согласно документам Apple, если вы установите его на Compiler Default, это эквивалентно gnu89, что тоже хорошо.

Возможно, это причина вашей ошибки.

+0

Это определено GCC_C_LANGUAGE_STANDARD в свойствах сборки цели, правильно? Если это так, мой комплект для тестирования модулей уже имеет значение C99. Это приложение для iPhone, на Xcode 3.1.4, если это имеет значение. –

+1

Извините, я получил это неправильно. Вам нужно установить его в GNU99. –

+0

Это сработало! Большое спасибо. –

Смежные вопросы