Я поражаю дорожный блок, и я задаюсь вопросом, может ли блестящий коллективный разум здесь помочь. В ObjC CocoaTouch я пытаюсь дразнить объект, который берет параметры структуры и возвращает структуру. OCMock выкашливает комок шерсти, таким образом, я пытался перенестись с Hamcrest matcher. Нет умрите. Функция/метод, которую я тестирую, выглядит примерно так:
- (CLLocationCoordinate2D)pixelToLatLong:(CGPoint)aPoint;
Я использую код как это:
#define OCMOCK_STRUCT(atype, variable) [NSValue value:&variable withObjCType:@encode(atype)]
-(void) testMyWidget
{
CLLocationCoordinate2D ulLL = (CLLocationCoordinate2D){123,456};
CLLocationCoordinate2D lrLL = (CLLocationCoordinate2D){654,321};
[[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, ulLL)] pixelToLatLong:(CGPoint){0,0}];
[[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, lrLL)] pixelToLatLong:(CGPoint){320,460}];//lower right point
}
Такие работы. Таким образом в моем объекте, который я тестирую, я делаю необходимые необходимые редактирования для получения, зеленая панель... допускают ошибку.. зеленая кнопка в окне информации о сборке. Когда я уверен, что мой тест должен передать, я добираюсь, утверждение привело ошибки к сбою. Ошибки сообщают мне, что метод был неожиданно вызван и перечисляет значения для этих структур как вопросительные знаки. Я пытался обернуть структуры с Hamcrest matchers, но я нигде не добираюсь. Я готовлюсь вспыхивать свой отладчик, который несомненно покажет мне что случилось. Кто-либо здесь испытал подобные затруднения из-за OCMock/Hamcrest и структур? Если так, что лучший способ состоит в том, чтобы обработать эти типы?
Иногда макет для ручной кодировки проще, чем пытаться привлечь цену MOCK Object Framework за пределами его нормальных шаблонов использования.
Вы очень близки. Ваш #define должен быть:
#define OCMOCK_STRUCT(atype, variable) [NSValue valueWithBytes:&variable withObjCType:@encode(atype)]