Вопрос

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

Мне очень трудно заставить этот объект 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, поэтому буду очень признателен за любые другие советы по этому поводу.

Спасибо.

Это было полезно?

Решение

На самом деле это ошибка компилятора, а не ошибка 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, что тоже нормально.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top