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 означава дълго дълго и i цяло число...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