OCMock возвращает значения
-
06-07-2019 - |
Вопрос
Я пытаюсь написать тест для метода, результат которого зависит от возвращаемого значения 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, что тоже нормально.
Вероятно, это причина вашей ошибки.