Ожидание и возврат OCMock дает ошибку подписи

У меня есть метод следующей подписи;

- (NSInteger) getFirstVisitTimeStamp;

Когда я использую OCMock для имитации и возврата значения, тест завершается с ошибкой ниже.

[[[[YSNYI13NMockingTest mockedYI13N] expect] andReturnValue:@(12345)] getFirstVisitTimeStamp];

Ошибка:

file:///%3Cunknown%3E: test failure:
failed: Return value does not match method signature; signature declares 'q' but value is 'i'.

Кто-нибудь может помочь?


person mohkhan    schedule 03.06.2014    source источник
comment
Являются ли q и i фактическими значениями, которые он перечисляет?   -  person shortstuffsushi    schedule 04.06.2014
comment
Вы запускаете это на 64-битном симуляторе?   -  person michaels    schedule 04.06.2014


Ответы (2)


На 64-разрядных устройствах NSInteger объявляется как long, но возвращаемое вами значение имеет тип int. Попробуйте указать длинное значение, добавив l после числа:

[[[[YSNYI13NMockingTest mockedYI13N] expect] andReturnValue:@(12345l)] getFirstVisitTimeStamp];
person michaels    schedule 03.06.2014
comment
Ну так.. Я потратил около 40 минут, пытаясь решить... и проклятие.. q означает длинный длинный и целое число... XD Большое спасибо, приятель! - person Matteo Gobbi; 07.02.2017

Как намекнул @michaels в комментариях, и после небольшого поиска вашего сообщения об ошибке, это, похоже, связано с открытая ошибка в OCMock.

Кажется, вместо этого вам может подойти OCMOCK_VALUE(...).

person shortstuffsushi    schedule 03.06.2014
comment
Я пытался использовать OCMOCK_VALUE(...) . это не сработало. - person mohkhan; 04.06.2014
comment
Явное указание числа как длинного, как предложил @michaels, также может работать. - person shortstuffsushi; 04.06.2014
comment
Это известная проблема. Для нормального человека все числа выглядят одинаково. Однако среда выполнения использует множество различных типов чисел. Один из подходов к устранению этого несоответствия — добавить в OCMock код для автоматического преобразования чисел разных типов. Это обсуждается в открытом вопросе, упомянутом выше. Проблема в том, что когда вы смотрите на все пограничные случаи и возможности среды выполнения, не так просто решить, какими должны быть эти преобразования. - person Erik Doernenburg; 04.06.2014
comment
@ErikDoernenburg, а как насчет ненормальных людей? Я знаю, что вы говорите, хотя. Я не уверен, какое решение было бы лучшим, но казалось, что OCMOCK_VALUE был предложен в качестве обходного пути. - person shortstuffsushi; 04.06.2014